Sql server SQL Server:限制数据范围
下面的查询应该显示两种产品的详细信息:DIS001和DIS002 如果是DIS002,则应“重置”查询,以便仅显示在DIS002售出日期之后售出的DIS001产品 老实说,我甚至不确定这是否可能。如有任何建议,我将不胜感激Sql server SQL Server:限制数据范围,sql-server,tsql,date,Sql Server,Tsql,Date,下面的查询应该显示两种产品的详细信息:DIS001和DIS002 如果是DIS002,则应“重置”查询,以便仅显示在DIS002售出日期之后售出的DIS001产品 老实说,我甚至不确定这是否可能。如有任何建议,我将不胜感激 SELECT DISTINCT Sales.RaisedDateTime AS [Date], Contacts.ContactID AS [Contact ID], Contacts.SiteID AS [Site ID], Sales.P
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])
有很多不同的语法可以解决这个问题,但这里有一个:
;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')
样本数据和预期结果将有助于更好地理解您的问题。