sql - 如何连接两个字段并在 WHERE 子句中使用结果?
问题描述
我必须根据日期时间信息获取所有最旧的记录。
数据
Id | External Id | Date | Time
1 | 1000 | 2020-08-18 00:00:00 | 02:30:22
2 | 1000 | 2020-08-12 00:00:00 | 12:45:51
3 | 1556 | 2020-08-17 00:00:00 | 10:09:01
4 | 1919 | 2020-08-14 00:00:00 | 18:19:18
5 | 1919 | 2020-08-14 00:00:00 | 11:45:21
6 | 1919 | 2020-08-14 00:00:00 | 15:54:15
预期结果
Id | External Id | Date | Time
2 | 1000 | 2020-08-12 00:00:00 | 12:45:51
3 | 1556 | 2020-08-17 00:00:00 | 10:09:01
5 | 1919 | 2020-08-14 00:00:00 | 11:45:21
我目前正在这样做
SELECT *
FROM RUN AS T1
WHERE CONCAT(T1.DATE, T1.TIME) = (
SELECT MIN(CONCAT(T2.DATE, T2.TIME))
FROM RUN AS T2
WHERE T2.EXTERNAL_ID = T1.EXTERNAL_ID
)
这是正确的做法吗?
谢谢,问候
更新 1:数据类型
DATE
列是datetime
TIME
列是varchar
解决方案
您可以使用窗口函数,例如DENSE_RANK()
SELECT ID, External_ID, Date, Time
FROM
(
SELECT DENSE_RANK() OVER (PARTITION BY External_ID ORDER BY Date, Time) AS dr,
r.*
FROM run r
) AS q
WHERE dr = 1
推荐阅读
- amazon-web-services - 如何添加 EMR Spark 步骤?
- reactjs - React Typescript - 将道具传递给 Hooks 之间的类型错误
- python - 如何在 django 模板中使用大于运算符
- typescript - 用导出标记函数、打字稿接口或打字稿类型是不好的做法还是有成本,然后再不导入?
- node.js - 服务器受到攻击导致node.js超时错误
- node.js - 如何从我的一个节点获取数据到另一个节点文件?
- javascript - 使用 Javascript 替换 JSON 中的项目
- java - 单发射器 Rx Java 的返回值
- github - 如何在github的文件夹中向上移动文件
- python - 在 Python 中可视化音高和节奏