SQL:按天计算项目(必须转换日期)

时间:2017-12-05 21:49:39

标签: sql sql-server

提前感谢您阅读我的问题。我有这样的数据:

| 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

哪个不起作用。我的查询应该是什么样的?

2 个答案:

答案 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。