繁体   English   中英

SQL查询每个ID的最新日期/时间戳记记录

[英]SQL query For Latest date/time Stamp record for each ID

请帮助将以下列表排序:

ID NAME DATE TIME STATUS

ID是唯一的,名称,日期,时间,状态在数据库中不断变化。

我需要输出列表,每个用户ID都有最新状态,日期和时间戳记

SELECT * FROM table
WHERE C_Time = 
  (SELECT max(C_Time) FROM table t1 WHERE C_Date = 
    (SELECT max(C_Date) FROM table t2 WHERE t1.ID = t2.ID)
  );

这将为您提供每个ID的最高C_DateC_Time值的条目

怎么样

SELECT T1.*
FROM T T1 INNER JOIN
    (
        SELECT ID,
               CName,
               MAX(CDate) CDate,
               MAX(CTime) CTime
        FROM T
        GROUP BY ID,
                 CName
    ) T2 
ON T1.CDate = T2.CDate 
   AND 
   T1.CTime = T2.CTime 
   AND T1.CName = T2.CName;

哪个会回来

+---------------------+----------+--------+----+-------+
|        CDate        |  CTime   | Status | ID | CName |
+---------------------+----------+--------+----+-------+
| 22/12/2018 00:00:00 | 16:27:57 |      1 |  1 | A     |
| 21/12/2018 00:00:00 | 15:41:13 |      4 |  2 | B     |
| 20/12/2018 00:00:00 | 12:35:27 |      3 |  2 | C     |
| 21/12/2018 00:00:00 | 15:29:46 |      4 |  3 | D     |
+---------------------+----------+--------+----+-------+

要么

SELECT T1.*
FROM T T1 INNER JOIN
    (
        SELECT ID,
               MAX(CDate) CDate,
               MAX(CTime) CTime
        FROM T
        GROUP BY ID
    ) T2 
ON T1.CDate = T2.CDate 
   AND 
   T1.CTime = T2.CTime;

哪个会回来

+---------------------+----------+--------+----+-------+
|        CDate        |  CTime   | Status | ID | CName |
+---------------------+----------+--------+----+-------+
| 22/12/2018 00:00:00 | 16:27:57 |      1 |  1 | A     |
| 21/12/2018 00:00:00 | 15:41:13 |      4 |  2 | B     |
| 21/12/2018 00:00:00 | 15:29:46 |      4 |  3 | D     |
+---------------------+----------+--------+----+-------+

演示版

我将为此使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by id order by date desc, time desc) as seqnum
      from t
     ) t
where seqnum = 1;

另外,如果您有一个每个客户一行的表,那么apply可能是最好的:

select t.*
from customers c cross apply
     (select top (1) t.*
      from t
      where t.id = c.id
      order by date desc, time desc
     ) t;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM