提前感谢您阅读我的问题。我有这样的数据:
| Date_Time | City | Vehicle_ID |
'2017-01-01 00:00:00.000' 'A' 1159
'2017-01-01 13:12:00.000' 'A' 1159
'2017-01-02 01:00:34.000' 'B' 1323
'2017-01-02 02:00:25.000' 'A' 1159
我想计算一个新专栏' Day_Number'它表示从min(Date_Time)+ 1开始的天数间隔,然后通过' City'来计算唯一(Vehicle_IDs)。以及“Day_Number'。
示例:
| City | Day | count_unique_vehicles |
'A' 1 2
'A' 2 1
'B' 2 1
我写了一些可怕的sql,比如
select date_time, city, count(distinct Vehicle_ID) as unique_vehicle
from X
where date_time >= '2017-12-01 00:00:00.000'
group by DATEADD(DAY, DATEDIFF(DAY,'2017-12-01', date_time), date_time), Division
哪个不起作用。我的查询应该是什么样的?
答案 0 :(得分:1)
试试这个:
SELECT
A.CITY, DATEDIFF(DAY, B.DAY_0, A.DATE_TIME) AS DAY, COUNT(DISTINCT A.VEHICLE_ID) AS UNIQUE_VEHICLE
FROM
YOUR_TABLE A, (SELECT MIN(DATE_TIME) AS DAY_0 FROM YOUR_TABLE) B
GROUP BY A.CITY, DATEDIFF(DAY, B.DAY_0, A.DATE_TIME)
ORDER BY A.CITY;
答案 1 :(得分:0)
您实际上可以使用窗口函数执行此操作:
select t.city,
datediff(day, min(min(t.date_time)) over (), cast(t.date_time as date)) as days,
count(distinct t.vehicle_id) as num_uniques
from t
group by t.city, cast(t.date_time as date)
order by t.city, days;
注意:这将返回0
最小日期的值。这对我来说很有意义。但是,如果您想要1
,则可以添加1。