这是我简单的代码:
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
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
我需要这样的东西:
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
Run Code Online (Sandbox Code Playgroud)
当我将min()和max()函数与group by一起使用时,它会聚合所有记录的罚款,但我必须每天只聚合具有相同ID的日期.
有任何想法吗?
提前致谢.
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
Run Code Online (Sandbox Code Playgroud)
这将生成这个子句GROUP BY:
c.code = 'B' -> a.user_id,c.code,b.a_day
c.code <> 'B' -> a.user_id,c.code,1
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
108 次 |
| 最近记录: |