我在sql server中有一个查询,显示了一些我不想要的记录。字段的关系如下:
ClientID可以有多个工作负载(WorkloadID),但不能反过来(一对多)。 每个WorkloadID都有一个分配给它的单元。 每个WorkloadID都分配了一个DWLD(日期)。 多个WorkloadID可以具有相同的ClientID,DWLD和Unit。
以下是查询:
select
w.WorkloadID,
w.ClientID,
w.Unit,
w.DWLD
from
Workload as w
left JOIN Clients as cli
ON w.ClientID = cli.ClientID
where
w.DWLD >= @start AND w.DWLD < @enddate
and w.IsDeleted <> 1
我希望它不会显示几个具有相同ClientID和相同单位和相同DWLD的可用记录中的1条记录。我试过自己加入表,使用having子句而不是exists子句,但没有得到正确的结果。
谢谢!
答案 0 :(得分:0)
尝试此查询。如果您没有从clients
表中检索记录,则无需加入该记录。
select w.WorkloadID, w.ClientID, w.Unit, w.DWLD
from Workload as w
where w.DWLD BETWEEN @start AND @enddate
and w.IsDeleted <> 1
AND NOT EXISTS (SELECT * FROM Workload
WEHRE ClientId = w.clientid
and unit = w.unit and dwld = w.dwld
and workloadid < w.workloadid
and DWLD BETWEEN @start AND @enddate
AND IsDeleted <> 1)
答案 1 :(得分:0)
如果DWLD列中的值相差小时/分钟,并且您希望它们按天数分组,请使用强制转换(强制转换(DWLD as float)为int)
select
max(w.WorkloadID) as WorkloadID,
w.ClientID,
w.Unit,
w.DWLD
from
Workload as w
left JOIN Clients as cli
ON w.ClientID = cli.ClientID
where
w.DWLD >= @start AND w.DWLD < @enddate
and w.IsDeleted <> 1
group by w.ClientID,
w.Unit,
w.DWLD