sql - 在 SQL 中选择列值和下一个最高列值
问题描述
我有两列:userid 和 date_accessed。我想要第三列,对于每一行(每个用户 ID 和 date_accessed 组合),返回 date_accessed 的下一个最高日期。现在我的查询是这样的:
SELECT
userid,
date_accessed AS first_date,
(SELECT date_accessed
FROM table
WHERE date_accessed > first_date
ORDER BY date_accessed ASC
LIMIT 1) AS second_date
FROM table
但这不起作用 - 有人可以帮我理解为什么吗?
解决方案
使用子查询,正确的语法是:
SELECT t.userid, t.date_accessed AS first_date,
(SELECT t2.date_accessed
FROM table t
WHERE t2.date_accessed > t.date_accessed
ORDER BY t2.date_accessed ASC
LIMIT 1
) AS second_date
FROM table t;
请注意,列引用都使用它们的表名来限定。
如果您希望每个用户都这样做,则还需要一个相关子句:
SELECT t.userid, t.date_accessed AS first_date,
(SELECT t2.date_accessed
FROM table t
WHERE t2.userid = t.userid AND t2.date_accessed > t.date_accessed
ORDER BY t2.date_accessed ASC
LIMIT 1
) AS second_date
FROM table t;
如果日期是唯一的,您可以使用LEAD()
:
select t.*,
lead(date_accessed) over (partition by userid order by date_accessed)
from t;
推荐阅读
- raku - 在 Raku 中实际复制数组的元素
- python-3.x - 在 PySpark 中不使用 for 循环查找 DataFrame 列中存在的相似字符串
- android - 带有接口的 Kotlin 中的类型不匹配
- java - 无法在 Spring Boot 应用程序中实例化会话工厂
- python - 我不明白为什么我不能让 python 中的 readline 函数在这个程序中工作。我究竟做错了什么?
- ios - AVAssetWriter 仅在 iOS 13 设备上具有音频“噼啪声”
- python-3.x - pyspark中基于rdd的操作中键值的最大值
- python - 如果列表作为 y 传递,Keras 中 y_true 的形状是什么?
- r - 在 R 中的字符串上使用 If / Else if 时出现错误
- python - 如何在数据框中找到另一个没有循环的相关行