SQL分组问题
我正在尝试编写一个查询,该查询将返回任何具有多个工单的客户,这些工单在一周中的不同日期。每个客户的每个工作单都应该在一周的同一天下,因此我想知道哪里不是这样,以便我可以修复它 该表的名称为Core.WorkOrder,它包含一个名为CustomerId的列,该列指定每个工单所属的客户。有一个名为TimeWindowsStart的列,可以用来查看每个工单的日期。我使用DATENAMEweekday,TimeWindowsStart来执行此操作 你知道怎么写这个查询吗?我被困在这里了SQL分组问题,sql,grouping,Sql,Grouping,我正在尝试编写一个查询,该查询将返回任何具有多个工单的客户,这些工单在一周中的不同日期。每个客户的每个工作单都应该在一周的同一天下,因此我想知道哪里不是这样,以便我可以修复它 该表的名称为Core.WorkOrder,它包含一个名为CustomerId的列,该列指定每个工单所属的客户。有一个名为TimeWindowsStart的列,可以用来查看每个工单的日期。我使用DATENAMEweekday,TimeWindowsStart来执行此操作 你知道怎么写这个查询吗?我被困在这里了 谢谢 我试一试
谢谢 我试一试,我只能在删除DISTINCT后运行它,一旦我删除了DISTINCT,它就会返回所有具有多个工单的客户,但不排除所有工单在一周的同一天落下的客户。@Joel:当然,DISTINCT在分析函数中不起作用。请现在试一试。
SELECT *
FROM (
SELECT *,
COUNT(dp) OVER (PARTITION BY CustomerID) AS cnt
FROM (
SELECT DISTINCT CustomerID, DATEPART(dw, TimeWindowStart) AS dp
FROM workOrder
) q
) q
WHERE cnt >= 2
Select ...
From WorkOrder As W
Where Exists (
Select 1
From WorkOrder As W1
And W1.CustomerId = W.CustomerId
And DatePart( dw, W1.TimeWindowStart ) <> DatePart( dw, W.TimeWindowStart )
)
SELECT CustomerId,
MIN(DATENAME(weekday, TimeWindowStart)),
MAX(DATENAME(weekday, TimeWindowStart))
FROM Core.WorkOrder
GROUP BY CustomerId
HAVING MIN(DATENAME(weekday, TimeWindowStart)) != MAX(DATENAME(weekday, TimeWindowStart))