sql-server 如何在sql中查找每种状态所花费的时间

ybzsozfc  于 2022-10-31  发布在  其他
关注(0)|答案(1)|浏览(171)

我想计算每个驾驶员在每个状态上花费的时间。我已经计算了时间差,但它存储在错误的单元格中,对应错误的驾驶员。请查看数据和我到目前为止的方法。提前感谢

我的数据

| 标识符|驱动程序标识|状态|进入时间|
| - -|- -|- -|- -|
| 一个|二百个|离线|2022年7月27日20时49分|
| 2个|二百个|可用|2022年7月27日20时53分|
| 三个|二百个|交付时|2022年7月27日20时55分|
| 四个|二百个|离线|2022年7月27日20时57分|
| 五个|二百零一|离线|2022年7月27日20时33分|
| 六个|二百零一|可用|2022年7月27日20时36分|
| 七个|二百零一|交付时|2022年7月27日20时39分|
| 八个|二百零一|离线|2022年7月27日20时44分|

我要的输出

| 标识符|驱动程序标识|状态|进入时间|输出(所用时间(分钟))|
| - -|- -|- -|- -|- -|
| 一个|二百个|离线|2022年7月27日20时49分|四个|
| 2个|二百个|可用|2022年7月27日20时53分|2个|
| 三个|二百个|交付时|2022年7月27日20时55分|2个|
| 四个|二百个|离线|2022年7月27日20时57分|- -|
| 五个|二百零一|离线|2022年7月27日20时33分|三个|
| 六个|二百零一|可用|2022年7月27日20时36分|三个|
| 七个|二百零一|交付时|2022年7月27日20时39分|五个|
| 八个|二百零一|离线|2022年7月27日20时44分|- -|

  1. select
  2. id,
  3. driver_id,
  4. driver_status,
  5. driver_status.entry_time as cur_time,
  6. LEAD(driver_status.entry_time) over (order by driver_status.id) as next_time,
  7. DATEDIFF(minute,driver_status.entry_time,lead(driver_status.entry_time) over (order by id)) as timespent in minutes
  8. from driver_status;
baubqpgj

baubqpgj1#

您对LEAD()分析函数的调用需要一个PARTITION子句:

  1. SELECT
  2. id,
  3. driver_id,
  4. driver_status,
  5. entry_time AS cur_time,
  6. LEAD(entry_time) OVER (PARTITION BY driver_id ORDER BY entry_time) AS next_time,
  7. DATEDIFF(minute,
  8. entry_time,
  9. LEAD(entry_time) OVER (PARTITION BY driver_id ORDER BY entry_time)
  10. ) AS [timespent in minutes]
  11. FROM driver_status
  12. ORDER BY
  13. driver_id,
  14. entry_time;

相关问题