选择sql中的列值和下一个最高的列值

6kkfgxo0  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(383)

我有两列:userid和date。我想要第三列,对于每一行(每个userid和date\u accessed组合),它返回date\u accessed的下一个最高日期。现在我的问题是:

  1. SELECT
  2. userid,
  3. date_accessed AS first_date,
  4. (SELECT date_accessed
  5. FROM table
  6. WHERE date_accessed > first_date
  7. ORDER BY date_accessed ASC
  8. LIMIT 1) AS second_date
  9. FROM table

但这不起作用-有人能帮我理解为什么吗?

smdncfj3

smdncfj31#

使用子查询,正确的语法是:

  1. SELECT t.userid, t.date_accessed AS first_date,
  2. (SELECT t2.date_accessed
  3. FROM table t
  4. WHERE t2.date_accessed > t.date_accessed
  5. ORDER BY t2.date_accessed ASC
  6. LIMIT 1
  7. ) AS second_date
  8. FROM table t;

注意,列引用都是用它们的表名限定的。
如果希望每个用户都这样,还需要一个相关子句:

  1. SELECT t.userid, t.date_accessed AS first_date,
  2. (SELECT t2.date_accessed
  3. FROM table t
  4. WHERE t2.userid = t.userid AND t2.date_accessed > t.date_accessed
  5. ORDER BY t2.date_accessed ASC
  6. LIMIT 1
  7. ) AS second_date
  8. FROM table t;

如果日期是唯一的,您可以使用 LEAD() :

  1. select t.*,
  2. lead(date_accessed) over (partition by userid order by date_accessed)
  3. from t;
展开查看全部

相关问题