2017-02-23 107 views
0

我需要一些SQL帮助。联合所有查询 - 需要每个组的最新日期

我有2个表(T1T2),通过使用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 

把它做成1台(T3)我用这个做:

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 

有什么建议?

嗨, 仍然没有工作,当我使用:

  1. SELECT GROUPN,ID_Pers,MAX(DateT)作为DateT,证券交易委员会 ( SELECT DateT,GROUPN,ID_Pers,证券交易委员会T1 UNION ALL SELECT DateT,GROUPN,ID_Pers,证券交易委员会T2 )T3 GROUP BY ID_Pers,GROUPN二段

我得到的结果: GROUP ID_PERS DateT秒
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

结果应该是 集团ID_PERS DateT秒
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

只有一个结果f或每个组和最新日期。

+2

'选择M. ax(DateT),GROUP,ID_Pers,Sec ......按组,ID_Pers组,Sec' – artm

+1

@artm把作为答案,比别人更好,因为它的短期和甜 – Edward

+0

@Edward,答案不工作仍然有问题 – Frankie

回答

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 
+0

嗨,这是可能的,而不MIN(SEC)? – Frankie

+0

@Frankie:这是不可能的。因为你想要2个字段的ID_Pers和GROUP组。您可以使用MAX或AVG(秒),或者如果没有必要,可以删除此字段,我的朋友。 – Tomato32

+0

你能告诉我如何做到这一点,而不敏(秒),造成敏(SEC)会影响结果。 – Frankie

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; 
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 
+0

我如何结合我的工会使用这个查询? SELECT GROUPN,ID_Pers,MAX(DateT)作为DateT二段FROM(SELECT DateT,GROUPN,ID_Pers二段FROM T1 UNION ALL SELECT DateT,GROUPN,ID_Pers二段FROM T2)T3 GROUP BY ID_Pers,GROUPN二段 – Frankie

0

enter image description here我认为它可以帮助你

enter image description here

;WITH 
    cteTotalSales (Datet,GROUPx,ID_Pers,Sec) 
    AS 
    (
select Datet,GROUPx,ID_Pers,Sec from t1 
union 
select Datet,GROUPx,ID_Pers,Sec from t2 
) 
select Datet,GROUPx,ID_Pers,Sec from cteTotalSales 
where Datet in (select max(Datet) from cteTotalSales group by GROUPx,ID_Pers) 
+0

只能使用工会,不能创建新表。有任何想法吗? – Frankie

+0

结果应该是:244 \t 2016年10月25日9时39分22秒\t 6.7 2016年10月25日8时38分59秒7 \t 2016年10月24日13时05分33秒\t – Frankie

+0

7.75 ; WITH cteTotalSales(Datet,GROUPx,ID_Pers,秒) AS ( 选择Datet,GROUPx,ID_Pers二段从t1 工会 从时刻t2 选择Datet,GROUPx,ID_Pers,秒) 选择Datet,GROUPx,ID_Pers二段从cteTotalSales 其中Datet在(选择最大值(Datet)从cteTotalSales组由GROUPx,ID_Pers)为了通过Datet降序 –

相关问题