-这是我当前的代码,它使我可以查看过去一周内提交的所有工作订单,并让我知道是否有相同的工作订单出现在6个月前。

SELECT 
  A.tagnumber, 
  count(*) AS CountTotal
FROM 
  v_workorder A 
WHERE 
  --Date range Within Today and 6 months ago
  wo_requestDate BETWEEN DATEADD(month, -6, GETDATE()) AND GETDATE() 
  AND
    EXISTS 
    ( -- Date range Within Today and 7 days ago
      select 
        tagnumber 
      FROM 
        v_workorder 
      WHERE 
        wo_requestDate BETWEEN DATEADD(DAY,-7,GETDATE()) AND GETDATE() 
    ) 
  AND
  A.wc_description = 'Corrective'       
  AND           
  A.itemtype_name = 'Building'
GROUP BY A.tagnumber
ORDER BY CountTotal DESC

-但是,现在我要获取getdate / adddate的第一个变量。 要检查1年前,+ /-15天。 因此基本上是1年15天,而不是6个月。

#1楼 票数:0 已采纳

过去1年+/- 15天

SELECT A.tagnumber, count(*) AS CountTotal
 FROM v_workorder A 
 WHERE wo_requestDate BETWEEN DATEADD(day, -15, DATEADD(year, -1, GETDATE())) AND DATEADD(day, 15, DATEADD(year, -1, GETDATE()))
    AND
        EXISTS ( select tagnumber FROM v_workorder WHERE  wo_requestDate BETWEEN DATEADD(DAY,-7,GETDATE()) AND GETDATE() )
    AND
            A.wc_description = 'Corrective'     AND         A.itemtype_name = 'Building'
 GROUP BY A.tagnumber
 ORDER BY CountTotal DESC

一年

SELECT ...
FROM ...
WHERE wo_requestDate BETWEEN DATEADD(year, -1, GETDATE()) AND GETDATE()
AND...;

15天

SELECT ...
FROM ...
WHERE wo_requestDate BETWEEN DATEADD(day, -15, GETDATE()) AND GETDATE()
AND...;

DATEADD()其他可能选项

year
quarter
month
dayofyear
day
week
weekday
hour
minute
second
millisecond

在这里查看更多。

#2楼 票数:0

要消除datetime的时间部分的问题,请执行以下操作:

CAST(GETDATE() AS DATE

查找一年前的日期:

SELECT DATEADD(YEAR, -1, CAST(GETDATE() AS DATE));

从那里减去15天,然后在终点增加15天。

...
WHERE 
  wo_requestDate >= DATEADD(DAY, -15, DATEADD(YEAR, -1, CAST(GETDATE() AS DATE)))
  AND
  wo_requestDate < DATEADD(DAY, 15, DATEADD(YEAR, -1, CAST(GETDATE() AS DATE)))

我更喜欢>=<而不是BETWEEN ,尤其是对于日期,只是为了避免与时间成分有任何歧义,因此,如果希望范围包括第15天,则可能需要在最后一个参数中添加16天。

  ask by SQLNoobNeedsHelp translate from so

未解决问题?本站智能推荐:

5回复

选择使用getdate()查询到SQLServer15天后?

我的输出是这样的: 我的查询: 我已经尝试过这种方法,但是没有得到所需的输出。 如果我的表中有一个日期= 2014-04-20 12:53:23.983,我想显示从该日期起15天之前的所有数据。 如何在何处写信?
3回复

案例陈述,寻找一个价值

我试图显示每个ID一行,但它返回三行。 如果ID为“ y”,则应显示“ y”。 如果显示“ y”和“ r”,则应为“ y”。 如果它具有“ y”,“ r”,“ n”,则应为“ y”。 如果它只是id和'r',则应该是'r'和id,然后只是'n',然后是'n'。 我似乎无法使用
6回复

Getdate(),-1天

我不明白为什么,但不知何故此查询不起作用。 我想取系统日期 -1 天,其中 sysdate 比当前日期小 1 天。
4回复

在where子句的getdate()和DATEADD(m,-1,getdate()))之间

为什么"where SomeDate between getdate() and DATEADD(m, -1, getdate()))" -不起作用? (我尝试计算上个月的一些值)
2回复

SQLServer梳理datepart与getdate和dateadd

我正在SQL Server 2008 R2中制作存储过程。 已经完成了SELECT并完成了所有工作,但是将我的datepart与Dateadd和getdate结合使用时遇到了一些问题。 问题是我想在查询中像这样显示它。 2013-06 2013-07 2013-08 所以我尝试使用此
3回复

SQL年(GETDATE())

我目前正在处理一个查询,该查询返回日期范围内的记录。 理想的开始日期是2015年以后的所有日期。 从理论上讲,以下三个SET语句中的每一个都不应该将变量设置为2015 *吗? 只有第一个日期(硬编码日期)才能达到预期的效果。 其他两个返回正在查询的所有记录。 我在这里想念什么吗?
1回复

dateadd秒<dateadd天问题

我有一个问题,我试图显示单日IE特定时间范围内的升级,我想根据升级的优先级查看今天的所有升级。 我所查询的内容似乎在主目录中有效,但是我不确定Second Max Select是否正常运行。 发生的事情是,我可以在一天开始时看到一些升级,但是一旦在一天的晚些时候清除了这些升级,昨天下午16
2回复

具有DateAdd的SSRSap年确定

我有一份报告,比较一年中任何日期范围的年度变化。 因此,在我的Reporting Services报表中,我具有用户提供的两个参数@StartDate和@EndDate。 我还具有上一年的两个隐藏参数(@ PriorStartDate,@ PriorEndDate),它们的默认值是使用诸如此