【问题标题】:Date diff between 2 max dates, per day over a given time period给定时间段内每天 2 个最大日期之间的日期差异
【发布时间】:2016-10-27 17:18:14
【问题描述】:

我正在尝试编写一个 sql 查询来返回给定位置每天的关闭时间和当天最终销售之间的差异。

数据库架构类似于:

Store_Closing_table(storeCloseTime, storeId) store_sale_table(saleTime, storeID)

我写了以下(伪代码):

select max(storeCloseTime), 
max(saleTime), datediff(mi, max(saletime), 
max(storeCloseTime)) as timeDifference, storeID 
from store_closing_table a
inner join store_sale_table b
on a.storeid = b.storeid
group by storeid, convert(date, saletime), convert(date, storeCloseTime)

它返回当天的最终销售和商店关闭时间之间的时间差,但仅适用于最近的日期(即最大日期)。

我不确定如何获取每天的最大销售日期和每天的最大商店关闭时间(在某些情况下商店一天“关闭”一次以上),然后获取两者之间的日期差异.

任何建议将不胜感激。

编辑:我修改了查询以包含 group by 子句,这让我更接近,但我得到了每个商店销售和每个商店关闭时间之间的差异。

即 商店在 3 天内有 3 次销售。我正在接近 1 - 销售 a,接近 1 - 销售 b,接近 1 - 销售 c,接近 2 - 销售 a,接近 2 - 销售 b,接近 2 - 销售 c,接近 3 - 销售 a,接近 3 - 销售b,关闭 3 - 销售 c。

有什么想法吗?

【问题讨论】:

  • 最后是否只需要“GROUP BY storeID , CAST(saletime as DATE)”
  • 我认为您还需要 Group by 中的 storeID。
  • @WEI_DBA - 是的,只是添加了 - 他可以将 CAST(saletime as DATE) 放在选择中 - 可以吗?
  • @AndrewDeighton,我想是的,因为它也在 Group By 中。
  • storeCloseTime和saleTime的数据类型是什么?

标签: mysql sql sql-server


【解决方案1】:

请试试这个。

WITH cte
AS ( 
       select StoreID,
              CONVERT(DATE, storeCloseTime) AS [Date], 
              max(storeCloseTime) as storeCloseTime,
              max(saleTime) as SaleTime,
         FROM Store_closing_table AS a
         JOIN Store_sale_table AS b ON a.storeid = b.storeid
        GROUP BY StoreID, CONVERT(DATE, storeCloseTime)
    )
       SELECT StoreID, [Date], StoreCloseTime, SaleTime
              datediff(mi, saletime, storeCloseTime) as timeDifference 

【讨论】:

    猜你喜欢
    • 2018-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多