gpt4 book ai didi

datetime - T-SQL - 根据销售额确定两个日期之间的特定天数

转载 作者:行者123 更新时间:2023-12-02 01:57:09 24 4
gpt4 key购买 nike

问题:给定一周中的某一天(1、2、3、4、5、6、7)、开始日期和结束日期,计算给定的次数星期几出现在开始日期和结束日期之间,不包括没有销售的日期。

上下文:

“Ticket”表具有以下结构和示例内容:

i_ticket_id c_items_total      dt_create_time       dt_close_time
----------------------------------------------------------------------------
1 8.50 '10/1/2012 10:23:00' '10/1/2012 11:05:05'
2 10.50 '10/1/2012 11:00:00' '10/1/2012 11:45:05'
3 8.50 '10/2/2012 08:00:00' '10/2/2012 09:25:05'
4 8.50 '10/4/2012 08:00:00' '10/4/2012 09:25:05'
5 7.50 '10/5/2012 13:22:23' '10/5/2012 14:33:27'
.
.
233 6.75 '10/31/2012 23:20:00' '10/31/2012 23:55:39'

详情

  1. 一个月中的一天或多天可能有也可能没有任何门票。 (即该地点在那/那一天关闭)

  2. 营业时间不固定。没有可预测的模式。

基于 Get number of weekdays (Sundays, Mondays, Tuesdays) between two dates SQL ,我派生了一个查询,该查询返回一周中给定日期在开始日期和结束日期之间出现的次数:

DECLARE @dtStart DATETIME = '10/1/2013 04:00:00'
DECLARE @dtEnd DATETIME = '11/1/2013 03:59:00'
DECLARE @day_number INTEGER = 1
DECLARE @numdays INTEGER

SET @numdays = (SELECT 1 + DATEDIFF(wk, @dtStart, @dtEnd)-
CASE WHEN DATEPART(weekday, @dtStart) @day_number THEN 1 ELSE 0 END -
CASE WHEN DATEPART(weekday, @dtEnd) <= @day_number THEN 1 ELSE 0 END)

现在我只需要对此进行过滤,以便任何零美元天数都不会包括在计数中。非常感谢您可以提供任何帮助,以根据票证表的内容添加此过滤器!

最佳答案

如果我没理解错的话,可以用一个日历表来统计星期几为n且介于开始和结束之间并且是有售票的日期,我猜是当日期存在的时候在门票中并且有 sum(c_items_total) > 0

WITH cal AS 
(
SELECT cast('2012-01-01' AS DATE) dt, datepart(weekday, '2012-01-01') dow
UNION ALL
SELECT dateadd(day, 1, dt), datepart(weekday, dateadd(day, 1, dt))
FROM cal
WHERE dt < getdate()
)

SELECT COUNT(1)
FROM cal
WHERE dow = 5
AND dt BETWEEN '2012-04-01' AND '2012-12-31'
AND EXISTS (
SELECT 1
FROM tickets
WHERE cast(dt_create_time AS DATE) = dt
GROUP BY cast(dt_create_time AS DATE)
HAVING sum(c_items_total) > 0
)
OPTION (MAXRECURSION 0)

SQLFiddle

关于datetime - T-SQL - 根据销售额确定两个日期之间的特定天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19387512/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com