【问题标题】:SQL Server : restricting data rangeSQL Server:限制数据范围
【发布时间】:2019-11-18 16:01:35
【问题描述】:

下面的查询应该显示 2 类产品的详细信息:DIS001 和 DIS002。

当 DIS002 时,这应该“重置”查询,以便它只显示在 DIS002 销售日期之后销售的 DIS001 产品。

说实话,我什至不确定这是否可能。如有任何建议,我将不胜感激。

SELECT DISTINCT 
    Sales.RaisedDateTime AS [Date],
    Contacts.ContactID AS [Contact ID],
    Contacts.SiteID AS [Site ID],
    Sales.ProductID AS [Product],
    CASE 
       WHEN Sales.ProductID = 'DIS002' 
          THEN Sales.RaisedDate 
          ELSE CONVERT(DATETIME, CONVERT(VARCHAR(10), '2019-10-28', 101) + ' 00:00:00') 
    END AS [Start Date] 
FROM 
    ((Bookings.Bookings Bookings
INNER JOIN 
    Contacts.Contacts Contacts ON (Bookings.ContactID = Contacts.ContactID))
INNER JOIN 
    Sales.Sales Sales ON (Bookings.ContactID = Sales.ContactID))
WHERE
    (Sales.ProductID = 'DIS001' AND 
     Sales.RaisedDate >= MAX([Start Date])

【问题讨论】:

  • 样本数据和预期结果将有助于更好地理解您的问题。

标签: sql-server tsql date


【解决方案1】:

有很多不同的语法可以解决这个问题,但这里有一个:

;with DIS002 as (
    select ContactID, max(RaisedDate) as DIS002Date 
    from Sales.Sales 
    where ProductID = 'DIS002'
    group by ContactID
)
SELECT DISTINCT 
    Sales.RaisedDateTime AS [Date],
    Contacts.ContactID AS [Contact ID],
    Contacts.SiteID AS [Site ID],
    Sales.ProductID AS [Product]
FROM 
    ((Bookings.Bookings Bookings
INNER JOIN 
    Contacts.Contacts Contacts ON (Bookings.ContactID = Contacts.ContactID))
INNER JOIN 
    Sales.Sales Sales ON (Bookings.ContactID = Sales.ContactID))
LEFT JOIN 
    DIS002 on DIS002.ContactID = Sales.ContactID
WHERE
    Sales.ProductID = 'DIS001' AND 
    Sales.RaisedDate >= isnull(DIS002date,'1900-01-01')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-05
    • 1970-01-01
    相关资源
    最近更新 更多