在实际日期的前1周获取详细信息

时间:2019-02-23 15:55:37

标签: sql sql-server

我有3张桌子,如下所示。

1。

Services                        
--------------------------
ServiceID (PK,int)                    
SalesID (FK, int)                  
ItemName (varchar)            
FirstServiceDate (datetime)   

2。

Sales              
------------------
SalesID (PK,int)  
CustomerID (FK,int)
SerialNo (varchar)
ModelNo (varchar)

和3。

Customer
--------------------
CustomerID (PK,int)
CustName (varchar)

我正在尝试在FirstServiceDate的日期之前1周从服务,销售和客户表中获取详细信息。我试过下面的查询。但它没有按预期工作。

Select B.SalesID, C.CustomerID, C.CustomerName, B.SerialNo, B.ModelNo, 
A.FirstServiceDate from Services A inner join Sales B on 
A.SalesID = B.SalesID inner join Customer C on 
B.CustomerID = C.CustomerID and 
FirstServiceDate = DATEADD(week, 1, GETDATE())

如果FirstServiceDate为2019年3月2日,则为1周前(即2月23日-今天)。我应该得到通知。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果FirstServiceDate列的类型为DateTime,则需要将其转换为Date

  select 
  B.SalesID, C.CustomerID, C.CustomerName, 
  B.SerialNo, B.ModelNo, A.FirstServiceDate 
  from Services A inner join Sales B 
  on A.SalesID = B.SalesID 
  inner join Customer C 
  on B.CustomerID = C.CustomerID 
  where convert(date, A.FirstServiceDate) = convert(date, dateadd(week, 1, getdate()))

这样,消除了日期的时间部分,仅比较了日期部分。
编辑
如果要在下周安排服务,请像这样更改where部分:

where 
  convert(date, A.FirstServiceDate) 
  between
    convert(date, getdate()) 
  and 
    convert(date, dateadd(week, 1, getdate()))