【问题标题】:Splitting an interval based table into daily data将基于间隔的表拆分为每日数据
【发布时间】:2018-11-22 12:47:02
【问题描述】:

我正在尝试从基于间隔的表中创建每日数据视图,如下所示:

startDate  |  endDate  | Product | Qty | Price |
2018-11-01   2018-11-30     A       12     10

这就是我希望视图中的结果:

  Date     | Product  | Qty  | Price |
2018-11-01      A       12      10
2018-11-02      A       12      10
....
2018-11-30      A       12      10
2018-11-31      A        0       0  

如上所示,我想将间隔拆分为每日观察,如果在给定日期未购买产品 A,则数量和价格应为 0。

我创建了一个日历表来帮助我提出查询,但到目前为止还没有运气。

我浏览过这些帖子,但无法解决我的问题:

Break into multiple rows based on date range of a single row

https://dba.stackexchange.com/questions/168915/split-date-range-into-separate-records

generate days from date range

【问题讨论】:

    标签: sql sql-server tsql datetime azure-sql-database


    【解决方案1】:

    你有一个日历表,太棒了。只需在 LEFT JOIN 的左侧使用它:

    SELECT Calendar.Date, YourData.*
    FROM Calendar
    LEFT JOIN YourData ON Calendar.Date BETWEEN startDate AND endDate
    WHERE Calendar.Date BETWEEN '2018-11-01' AND '2018-11-30'
    

    如果您想要 所有 日期-产品对,请添加 CROSS JOIN:

    SELECT Calendar.Date, Products.Product, YourData.*
    FROM Calendar
    CROSS JOIN (
        SELECT Product
        FROM YourData
        GROUP BY Product
    ) AS Products
    LEFT JOIN YourData ON
        Calendar.Date BETWEEN startDate AND endDate AND
        Products.Product = YourData.Product
    WHERE Calendar.Date BETWEEN '2018-11-01' AND '2018-11-30'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-11
      • 1970-01-01
      • 2021-02-07
      • 2017-10-24
      • 2020-09-20
      • 1970-01-01
      • 2022-01-10
      • 2013-09-01
      相关资源
      最近更新 更多