/ / Как към GROUP BY с изключение? - sql, sql-server

Как да GROUP BY с изключение? - sql, sql-server

Ето моя опростен код:

SELECT
a.user_id as User_ID,
min(b.a_day) as Date_from,
max(b.a_day) as Date_to,
c.code as ID
FROM a, b, c
WHERE
a_day > (day, -15, getdate())
GROUP BY
a.user_id,
c.code

Заявката дава следния изход:

User ID date_from   date_to     id
1234567 2016-06-13  2016-06-13  B
1234567 2016-06-17  2016-06-17  A
12345672016-06-18  2016-06-18   A
1234567 2016-06-19  2016-06-19  A
1234567 2016-06-20  2016-06-20  A
1234567 2016-06-21  2016-06-21  C
1234567 2016-06-22  2016-06-22  C
1234567 2016-06-23  2016-06-23  D

Трябва ми нещо подобно:

User ID date_from   date_to     id
1234567 2016-06-13  2016-06-13  B
1234567 2016-06-17  2016-06-20  A
1234567 2016-06-21  2016-06-22  C
1234567 2016-06-23  2016-06-23  D

Когато използвам функцията min () и max () с група от, тя събира глоба за всички записи, но трябва да събирам само дати с един и същи идентификатор ден след ден.

Някакви идеи?

Благодаря предварително.

Отговори:

4 за отговор № 1

Можете да го направите с условно групиране, като използвате CASE EXPRESSION в GROUP BY клауза :

SELECT
a.user_id as User_ID,
min(b.a_day) as Date_from,
max(b.a_day) as Date_to,
c.code as ID
FROM a, b, c
WHERE
a_day > (day, -15, getdate())
GROUP BY
a.user_id,
c.code,
CASE WHEN c.code in ("B","D") THEN b.a_day ELSE 1 END

Което ще генерира това като GROUP BY клауза :

c.code = "B" -> a.user_id,c.code,b.a_day
c.code <> "B" -> a.user_id,c.code,1