这是我简洁的代码:
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
Query提供以下输出:
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()函数与group by一起使用时,它会聚合所有记录的罚款,但我必须每天只聚合具有相同ID的日期。
有什么想法吗?
提前致谢。
答案 0 :(得分:4)
您可以使用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