Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何仅从表中选择数据,其中变量包含getdate()的行,直到包括周末(星期五)为止_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何仅从表中选择数据,其中变量包含getdate()的行,直到包括周末(星期五)为止

Sql 如何仅从表中选择数据,其中变量包含getdate()的行,直到包括周末(星期五)为止,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一张表格,上面有一周中每天的商品、商店和销售预测。有些日子不见了。我想对每日销售预测进行汇总,以获得每周销售预测,但我只想在表中显示了今天和从今天到星期五(包括星期五)的每天的情况下进行此操作。今天可能是运行此代码的一周中的任何一天 预期结果将采用以下格式。只有在原始表中包含今天(包括星期五)的每日行的商品/门店组合才应显示在此处。每周预测是当前所有天数的总和,不仅仅是今天到周五。我刚刚创建了一个函数,它将为您提供到特定工作日@endDay的天数。 1=周日,2=周一。。。。6=周五,7=周

我有一张表格,上面有一周中每天的商品、商店和销售预测。有些日子不见了。我想对每日销售预测进行汇总,以获得每周销售预测,但我只想在表中显示了今天和从今天到星期五(包括星期五)的每天的情况下进行此操作。今天可能是运行此代码的一周中的任何一天


预期结果将采用以下格式。只有在原始表中包含今天(包括星期五)的每日行的商品/门店组合才应显示在此处。每周预测是当前所有天数的总和,不仅仅是今天到周五。

我刚刚创建了一个函数,它将为您提供到特定工作日@endDay的天数。 1=周日,2=周一。。。。6=周五,7=周六。因此,对于星期五,您将通过@endDay的函数6。下面是创建函数的DDL:

-- Note that the logic above is assuming your @@DATEFIRST=7 (this is the default, you can check using `SELECT @@DATEFIRST`. 

CREATE FUNCTION dbo.DaysUntilThisWeekday(@endDay TINYINT, @date DATE)
RETURNS TABLE WITH SCHEMABINDING AS RETURN
SELECT N = ((@endDay+7)-DATEPART(WEEKDAY,@date))%7
WHERE  @endDay BETWEEN 1 AND 7; -- startup predicate, no rows returned otherwise
GO
您可以对您的表使用函数,如下所示,包括可以在本地运行的示例数据:

DECLARE @yourTable TABLE (SomeDate DATE);
INSERT @yourTable(SomeDate) VALUES ('20190518'),('20190519'),('20190520'),('20190521'),
          ('20190522'),('20190523'),('20190524'),('20190525'),('20190526'),('20190527')

DECLARE @endDay   TINYINT = 6, -- 6 for Friday
        @startDay DATE    = GETDATE();

SELECT     t.SomeDate
FROM       @yourTable                                 AS t
CROSS JOIN dbo.DaysUntilThisWeekday(@endDay,@startDay) AS f
WHERE      t.SomeDate BETWEEN @startDay AND DATEADD(DAY,f.N,@startDay);
返回:

这是从今天到周五的所有记录。如果您无法创建函数,您可以简单地执行以下操作:

DECLARE @yourTable TABLE (SomeDate DATE);
INSERT @yourTable(SomeDate) VALUES ('20190518'),('20190519'),('20190520'),('20190521'),
          ('20190522'),('20190523'),('20190524'),('20190525'),('20190526'),('20190527')

DECLARE @startDay DATE = GETDATE();

SELECT t.SomeDate
FROM   @yourTable AS t
WHERE  t.SomeDate BETWEEN @startDay AND 
       DATEADD(DAY,((13)-DATEPART(WEEKDAY,GETDATE()))%7,@startDay);

我认为样本数据会很有帮助。为什么一个简单的分组方式不能解决你的问题呢?问题不在于求和和和分组方式,而是根据我描述的逻辑过滤掉没有所有行的项目/存储。我将尝试获取数据。向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试创建一个样本一旦你给了每行一个星期的数字,你只需要计算每日预测的数量并将其相加。然后你过滤掉那些一周内没有7天每日预测的数据。史蒂夫,我需要的不是整整7天,而是从今天到周五的任何情况。所以如果是星期三,需要3天,但是如果是星期一,需要5天。顺便说一句,我目前在提出问题和提供数据方面缺乏技巧,因此无法解决这个问题。这个逻辑适用于问题的第一部分,但最后一步是对符合标准的商品/商店一周中所有天的销售预测值求和,即从getdate到周五,他们每天都有行。因此,要将所有天的值相加,而不仅仅是getdate到Friday。我也许能想出最后一步,但我想用最好的方法。
DECLARE @yourTable TABLE (SomeDate DATE);
INSERT @yourTable(SomeDate) VALUES ('20190518'),('20190519'),('20190520'),('20190521'),
          ('20190522'),('20190523'),('20190524'),('20190525'),('20190526'),('20190527')

DECLARE @startDay DATE = GETDATE();

SELECT t.SomeDate
FROM   @yourTable AS t
WHERE  t.SomeDate BETWEEN @startDay AND 
       DATEADD(DAY,((13)-DATEPART(WEEKDAY,GETDATE()))%7,@startDay);