原始数据
| TERMINAL_ID | MAXDATE | TERMINAL_ID | OCCUR_DATE_TIME | TROUBLE_CD | ||
| 1 | 12345 | 20100401102754 | 12345 | 20100401102754 | 210 | |
| 2 | 12345 | 20100401102754 | 12345 | 20100401102754 | 211 | |
| 3 | 12345 | 20100401102754 | 12345 | 20100401102754 | ?09 | |
| 4 | 12346 | 20100401102770 | 12346 | 20100401102770 | ?43J | |
| 5 | 12347 | 20100401102780 | 12347 | 20100401102780 | ?42a | |
| 6 | 12348 | 20100401102790 | 12348 | 20100401102790 | ?43J | |
| 7 | 12349 | 20100401102800 | 12349 | 20100401102800 | 209 | |
| 8 | 12350 | 20100401102820 | 12350 | 20100401102820 | ?117 | |
| 9 | 12351 | 20100401102830 | 12351 | 20100401102830 | 211 | |
| 10 | 12352 | 20100401102840 | 12352 | 20100401102840 | ?42a | |
| 11 | 12353 | 20100401102850 | 12353 | 20100401102850 | ?43J |
想要的数据
TERMINAL_ID MAXDATE TERMINAL_ID OCCUR_DATE_TIME TROUBLE_CD 1 12345 20100401102754 12345 20100401102754 210 2 12346 20100401102770 12346 20100401102770 ?43J 3 12347 20100401102780 12347 20100401102780 ?42a 4 12348 20100401102790 12348 20100401102790 ?43J 5 12349 20100401102800 12349 20100401102800 209 6 12350 20100401102820 12350 20100401102820 ?117 7 12351 20100401102830 12351 20100401102830 211 8 12352 20100401102840 12352 20100401102840 ?42a 9 12353 20100401102850 12353 20100401102850 ?43J
问题是:
现在的需求是 一个terminal_id 对应一个时间, 可当时间相等时,怎么人已筛选出一条信息。
就是,上面数据里面 terminal_id 位 12345的有3条数据,怎么筛选出一条
我的SQL
SELECT DISTINCT F2.OCCUR_DATE_TIME, F1.TERMINAL_ID, F2.TROUBLE_CD
FROM
(
SELECT T1.TERMINAL_ID, MAX(T1.OCCUR_DATE_TIME) MaxDate FROM MON.ATMTROTBL T1
WHERE
1 = 1
AND T1.terminal_id Like '12%'
AND T1.occur_date_time <= '20101011010101'
AND T1.trouble_cd <> '?00' AND T1.trouble_cd <> '?100'
AND T1.trouble_cd <> '?30' AND T1.trouble_cd <> '?31'
AND T1.trouble_cd <> '?35' AND T1.trouble_cd <> '@01'
AND T1.trouble_cd <> '@02' AND T1.trouble_cd <> '@03'
AND T1.trouble_cd <> '@04' AND T1.trouble_cd <> '@05'
AND T1.trouble_cd <> '@08' AND T1.trouble_cd <> '201'
AND T1.trouble_cd <> '202' AND T1.trouble_cd <> '203'
AND T1.trouble_cd <> '204' AND T1.trouble_cd <> '205'
AND T1.trouble_cd <> '207' AND T1.trouble_cd <> '208'
AND T1.trouble_cd <> '217' AND T1.trouble_cd <> '218'
AND T1.trouble_cd <> '219' AND T1.trouble_cd <> '220'
AND T1.trouble_cd <> '221' AND T1.trouble_cd <> '222'
AND T1.trouble_cd <> '223' AND T1.trouble_cd <> '224'
AND T1.trouble_cd <> '=01' AND T1.trouble_cd <> '=05'
AND T1.trouble_cd <> '=06' AND T1.trouble_cd <> '=07'
AND T1.trouble_cd <> '=08' AND T1.trouble_cd <> '=12'
AND T1.trouble_cd <> '=16' AND T1.trouble_cd <> '>01'
AND T1.trouble_cd <> '>02' AND T1.trouble_cd <> '>03'
AND T1.trouble_cd <> '>06' AND T1.trouble_cd <> '>07'
AND T1.trouble_cd <> '>08' AND T1.trouble_cd <> '>09'
AND T1.trouble_cd <> '>10' AND T1.trouble_cd <> '>11'
AND T1.trouble_cd <> '>12' AND T1.trouble_cd <> '>16'
AND T1.trouble_cd <> '?4A' AND T1.trouble_cd <> '?4B'
AND T1.trouble_cd <> '?4C' AND T1.trouble_cd <> '?4D'
AND T1.trouble_cd <> '?4E' AND T1.trouble_cd <> '?4F'
AND T1.trouble_cd <> '?4G' AND T1.trouble_cd <> '?4H'
GROUP BY TERMINAL_ID
) F1
Left JOIN
(
SELECT
T1.terminal_id,
T1.occur_date_time,
T1.trouble_cd
FROM
MON.ATMTROTBL T1
ORDER BY
T1.terminal_id ASC, T1.occur_date_time DESC
) F2
ON
F1.TERMINAL_ID = F2.TERMINAL_ID
AND F1. MaxDate = F2.OCCUR_DATE_TIME
本文介绍了一种使用SQL从重复时间戳记录中筛选特定数据的方法。面对同一终端ID有多条相同时间记录的情况,通过构建子查询并结合左连接,有效地解决了数据筛选的问题。此方法对于处理大量重复数据尤其有用。
26万+





