在特定的天数内选择一些数据

时间:2018-10-31 07:36:18

标签: sql-server tsql

我正在处理销售数据,我想知道客户A是否在3天内从多家供应商处购买了产品X,而我仅在一个日期(索赔日期)上工作

我找不到它的T-Sql查询 例如

SELECT CusName,ProdName,ProvName
FROM table1 
WHERE [Claim Date] between Day([Claim Date]) and DATEADD (Day ,-3 , [Claim Date] 

3 个答案:

答案 0 :(得分:0)

您可以为此使用以下代码

SELECT t1.CusName,t1.ProdName,t1.ProvName,t2.ProvName
FROM table t1
JOIN table t2 ON t1.CusName=t2.CusName AND t1.ProdName=t2.ProdName 
WHERE t1.ProvName!=t2.ProvName
    AND ABS(DATEDIFF(day,t1.ClaimDate,t2.ClaimDate)) = 3

答案 1 :(得分:0)

您需要一个having子句和提供者的数量:

SELECT CusName, COUNT(DISTINCT ProvName) Provider_count
FROM table1 
WHERE [Claim Date] between Day([Claim Date]) and DATEADD (Day ,-3 , [Claim Date] 
AND ProdName = 'X'
GROUP BY CusName
HAVING COUNT(DISTINCT ProvName) > 1

请注意,您不需要在select子句中包含count,但是您确实需要在hading子句中包含count。

答案 2 :(得分:0)

WHERE EXISTS子句应该完成这项工作:

SELECT CusName,ProdName,ProvName
FROM table1 a
WHERE EXISTS (
  SELECT 1 FROM table1 b WHERE
  b.CusName=a.CusName AND 
  b.ProdName=a.ProdName AND
  b.ProvName!=a.ProvName AND
  ABS(DATEDIFF(day,a.ClaimDate,b.ClaimDate))<3
)