2017-02-23 23 views
0

Мне нужна помощь с SQL.Union all query - нужна последняя дата для каждой группы

я получил 2 таблицы (T1 и T2), сделал это в 1 таблице (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 

Любые предложения?

Привет, до сих пор не работает, когда я использую:

  1. ВЫБОР GROUPN, ID_Pers, MAX (DateT), как DateT, п ОТ ( SELECT, DateT, GROUPN, ID_Pers, сек от T1 UNION ВСЕ ВЫБОР DateT, GROUPN, ID_Pers, сек от T2 ) T3 GROUP BY ID_Pers, GROUPN, п

Я получаю результат: ГРУППА 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

Только один результат f или каждой группы и последней дате.

+2

'ВЫБРАТЬ м ax (DateT), GROUP, ID_Pers, Sec ......group by GROUP, 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

@ Франки: Это невозможно. Потому что вам нужна группа по 2 поля ID_Pers и GROUP. Вы можете использовать MAX или AVG (Sec), или удалить это поле, если это не необходимо, мой друг. – Tomato32

+0

Не могли бы вы рассказать мне, как это сделать без Min (sec), потому что Min (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, Sec FROM (SELECT DateT, GROUPN, ID_Pers, Sec FROM T1 UNION ALL SELECT DateT, GROUPN, ID_Pers, Sec FROM T2) T3 GROUP BY ID_Pers, GROUPN, Sec – 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

Может использовать только union, не может создать новую таблицу. Есть идеи? – Frankie

+0

Результат должен быть: 244 \t 2016/10/25 9:39:22 \t 6,7 2016/10/25 8:38:59 2016/10/24 13:05:33 \t – Frankie

+0

7,75 ; с cteTotalSales (Datet, GROUPx, ID_Pers, п) А.С. ( выберите Datet, GROUPx, ID_Pers, п от t1 объединение выберите Datet, GROUPx, ID_Pers, Sec от t2 ) выберите Datet, GROUPx, ID_Pers , Sec из cteTotalSales где Datet in (выберите max (Datet) из группы cteTotalSales группой GROUPx, ID_Pers) по Datet desc –

 Смежные вопросы

  • Нет связанных вопросов^_^