我需要一些SQL帮助。
我有2个表(T1
和T2
),使用T3
union all
)
T1
DateT GROUP ID_Pers Sec
2016/10/24 13:05:33 840 122 7.75
2016/10/24 11:10:29 840 244 8.4
T2
DateT GROUP ID_Pers Sec
2016/10/24 12:10:37 840 122 7.75
2016/10/25 08:38:59 840 156 7
2016/10/25 09:39:22 840 244 6.7
T3
DateT GROUP ID_Pers Sec
2016/10/24 13:05:33 840 122 7.75
2016/10/24 11:10:29 840 244 8.4
2016/10/24 12:10:37 840 122 7.75
2016/10/25 08:38:59 840 156 7
2016/10/25 09:39:22 840 244 6.7
我用它来做到这一点:
SELECT DateT,GROUP, ID_Pers,Sec
FROM
(
SELECT DateT,GROUP, ID_Pers,Sec FROM T1
UNION ALL
SELECT DateT,GROUP, ID_Pers,Sec FROM T2
) T3
GROUP BY ID
现在我想向此联合添加一个查询,以获得最新的DateT
,每Group
,每IDPers
,Sec
结果应该是这样的:
DateT GROUP ID_Pers Sec
2016/10/24 13:05:33 840 122 7.75
2016/10/25 09:39:22 840 244 6.7
2016/10/25 08:38:59 840 156 7
您好, 当我使用时,仍然无法正常工作:
我得到的结果:
GROUP ID_PERS DateT Sec
840 122 2016/10/24 13:05:33 7.75
840 156 2016/10/25 8:38:59 7
840 244 2016/10/25 9:39:22 6.7
840 244 2016/10/24 11:10:29 8.4
ID_Pers的结果为244.应该只显示244的一个结果。
结果应该是
GROUP ID_PERS DateT Sec
840 122 2016/10/24 13:05:33 7.75
840 156 2016/10/25 8:38:59 7
840 244 2016/10/25 9:39:22 6.7
每组只有一个结果和最新日期。
答案 0 :(得分:0)
您可以在下面参考此查询。它将按预期返回结果。
SELECT GROUP, ID_Pers, MAX(DateT) as DateT, MIN(Sec) as Sec
FROM
(
SELECT DateT,GROUP, ID_Pers,Sec FROM T1
UNION ALL
SELECT DateT,GROUP, ID_Pers,Sec FROM T2
) T3
GROUP BY ID_Pers, GROUP
答案 1 :(得分:0)
而不是GROUP BY
,我认为您需要ROW_NUMBER()
:
SELECT DateT, GROUP, ID_Pers, Sec
FROM (SELECT DateT, GROUP, ID_Pers, Sec,
ROW_NUMBER() OVER (PARTITION BY GROUP, ID_Person ORDER BY DateT DESC) as seqnum
FROM ((SELECT DateT,GROUP, ID_Pers,Sec FROM T1
) UNION ALL
(SELECT DateT,GROUP, ID_Pers,Sec FROM T2
)
) T3
) T3
WHERE seqnum = 1;
答案 2 :(得分:0)
;WITH cteDate(DateT, GROUP, ID_Pers,Sec)
AS
(
SELECT DateT,GROUP, ID_Pers,Sec FROM T1
UNION ALL
SELECT DateT,GROUP, ID_Pers,Sec FROM T2
)
SELECT *
FROM cteDate x
INNER JOIN (
SELECT MAX(DateT) MaxDateT,GROUP, ID_Pers
FROM cteDate
GROUP BY GROUP, ID_Pers
) temp
ON temp.MaxDateT = x.DateT AND temp.GROUP = x.GROUP AND temp.ID_Pers = x.ID_Pers
答案 3 :(得分:0)