微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何连接两个字段并在 WHERE 子句中使用结果?

如何解决如何连接两个字段并在 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

Demo

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。