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

How to concat two fields and use the result in WHERE clause?

我必须根据日期时间信息获取所有最早的记录。

数据

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

您可以使用 window 函数,例如 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