SQL-将具有相同ID和日期的数据分组到每台计算机,但名称不同

时间:2018-11-06 18:31:35

标签: sql sql-server

我正在尝试创建一个查询,该查询将按CT ID和Date对数据进行分组,这些CT ID和Date具有所有3个MachineID(分别为1、10和20)和至少一个不同的锯切模式名称。

此图像显示了我要获取的数据和我当前正在使用的代码的突出显示示例

my code

我试图仅显示与图像中突出显示的行类似的数据(CT ID 501573833),并排除其中所有3个MachineID的“锯齿图案名称”都相同的行周围的数据。

2 个答案:

答案 0 :(得分:1)

您的描述建议使用group byhaving。您描述的条件都可以放在having子句中:

select ct_id, date
from t
group by ct_id, date
having sum(case when machineid = 1 then 1 else 0 end) > 0 and
       sum(case when machineid = 10 then 1 else 0 end) > 0 and
       sum(case when machineid = 20 then 1 else 0 end) > 0 and
       min(sawing_pattern_name) <> max(sawing_pattern_name)

答案 1 :(得分:0)

在我看来EXISTS在这里可能很有用。

SELECT 
[CT ID], 
[MachineID], 
[Sawing Pattern name], 
[Time], 
CAST([Time] AS DATE) AS [Date]
FROM [DataCollector].[dbo].[Maxicut] t
WHERE EXISTS 
(
  SELECT 1
  FROM [DataCollector].[dbo].[Maxicut] d
  WHERE d.[CT ID] = t.[CT ID]
    AND CAST(d.[Time] AS DATE) = CAST(t.[Time] AS DATE)
    AND d.[MachineID] != t.[MachineID]
    AND REPLACE(d.[Sawing Pattern name],',','') != REPLACE(t.[Sawing Pattern name],',','')
);