【问题标题】:Count the number of days of the vehicle is running based on vehicle status根据车辆状态统计车辆运行天数
【发布时间】:2021-11-05 22:21:53
【问题描述】:

我在 SQL Server 数据库中有车辆信息数据,如下所示:

S.No Vehicle_ID status date_on
1 1 Start 2011-01-20
2 1 Failed 2011-01-23
3 1 Start 2011-01-26
4 1 Failed 2011-01-30
5 2 Start 2012-04-15
6 2 Failed 2012-04-20
7 3 Start 2019-06-23
8 4 Start 2021-07-23
9 4 Start 2021-08-25
10 4 Failed 2021-08-10

要求的结果是这样的:

S.No Min Date to Till date Vehicle_ID 1 Vehicle_ID 2 Vehicle_ID 3 Vehicle_ID 4...
1 2011-01-20 1 0 0 0
2 2011-01-21 2 0 0 0
3 2011-01-22 3 0 0 0
4 2011-01-23 4 0 0 0
5 2011-01-24 4 0 0 0
6 2011-01-25 4 0 0 0
7 2011-01-26 5 0 0 0
8 2011-01-27 6 0 0 0
9 2011-01-28 7 0 0 0
10 2011-01-29 8 0 0 0
11 2011-01-30 9 0 0 0
12 2011-01-31 9 0 0 0
13 2011-02-01 9 0 0 0
14 .......... 9 0 0 0
.... 2012-04-15 9 1 0 0
.... 2012-04-20 9 6 0 0
.... 2019-06-23 9 6 1 0
.... 2019-06-24 9 6 2 0
.... Till today 9 6 Till today day count XXXX
  1. Min DateTill date 列的开始日期应从源表中的date_on 列的最短日期到达。

  2. 天数将从status 列开始计算。如果车辆状态为“失败”,则停止计算日期并坚持之前的计数。

示例车辆 ID = 3:

开始日期 = 2019-06-23

这里,Vehicle ID = 3 没有失败的日期,所以我们计算到今天为止的天数。

我尝试使用 PIVOT 获取动态列结果,但我仍在努力计算每个车辆 ID 的天数。

【问题讨论】:

  • 根据问题指南,请展示您的尝试并告诉我们您发现了什么(在本网站或其他地方)以及为什么它不能满足您的需求。
  • 您希望从2011-01-20 到今天的所有日子都作为单独的行吗?那是 3885 行。你有日历表吗?
  • @Charlieface。是的,我希望从 '2011-01-20' 到今天的所有日子都作为单独的行。 SQL 中没有创建日历表
  • 你知道你有多少辆车吗?
  • @Charlieface- 车辆也是动态的。它可能会定期增加。

标签: sql sql-server database tsql view


【解决方案1】:

尝试:

select distinct t.[date_on],
STUFF((SELECT distinct ', ' + t1.vehicle_id
     from table1 t1
     where t.[date_on] = t1.[date_on]
        FOR XML PATH(''), TYPE
        ).value('.', 'NVARCHAR(MAX)') 
    ,1,2,'') vehicle_id
from table1 t;

将 table1 替换为您的表名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多