2017-02-23 36 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降序 –

相關問題