Группировать по 2 отдельным столбцам в SQL Server - PullRequest
3 голосов
/ 06 июля 2011

У меня есть данные как ниже

ID  Stat    Date
1   1       2009-06-01
2   1       2009-06-20
3   1       2009-06-10
4   2       2009-06-10

O / P, чтобы быть похожим на это ..

ID     Stat   CDate
2      1      2009-06-20
4      2      2009-06-10

Я пробовал с запросом ниже и не удалось, пожалуйста, предложите.

Select Distinct stat,MAX(Cdate) dt,id  From testtable
Group By stat,id

Получил решение ..

Выберите f1.id, f1.stat, f1.cdate Из testtableas F1 Join (Выберите stat, MAX (cdate) как dt из группы тестируемых по stat)как F2 на f2.stat = F1.stat и f2.dt = f1.cdate

Ответы [ 5 ]

4 голосов
/ 06 июля 2011
SELECT t1.id, t1.stat, t1.date
FROM testtable t1
JOIN (SELECT stat, MAX(date) date FROM testtable GROUP BY stat) t2 ON t1.stat = t2.stat AND t1.date = t2.date
GROUP BY stat
2 голосов
/ 06 июля 2011

Полагаю, вы хотите, чтобы статистика относилась к максимальной дате, верно?

select t1.id, t1.stat, t1.cdate 
from testtable t1,
  (select stat, max(cdate) max_date from testtable
   group by stat) t2
where t1.stat = t2.stat and t1.cdate = t2.max_date
1 голос
/ 18 октября 2011

Мне понравилось решение от nicktrs.Если вы используете SQL SERVER 2005 или более позднюю версию, это может сработать для вас;

select k.id, k.stat, k.cdate from(
    select id, stat, cdate, row_num=rownumber()
    over (partition by stat order by cdate desc) as k from testtab )
where k.row_num=1;

вывод внутреннего запроса выглядит следующим образом:

ID  Stat    Date         Row_num
2   1       2009-06-20   1
3   1       2009-06-10   2
1   1       2009-06-01   3
4   2       2009-06-10   1

Вывод после выполнения полного запроса:

ID  Stat    Date
2   1       2009-06-20
4   2       2009-06-10

Надеюсь, это поможет.Прощайте.

1 голос
/ 06 июля 2011

;with CTE AS
(
    Select stat,MAX(Cdate)Over(Partition by stat) as dt,id
    From testtable  
)
Select ID,stat,dt
From CTE
Inner JOIn testtable On testtable.id=CTE.ID and testtable.date=CTE.dt
Group By stat

1 голос
/ 06 июля 2011

Вы не можете добавить идентификатор здесь.Потому что группировка по id приведет не к желаемому результату.По умолчанию id отличается по своей природе.поэтому группировка по id приведет к получению всех данных.

...