Sql语法新手

时间:2014-08-11 20:55:43

标签: sql sql-server

请帮助我在Sql Server Reporting Services(Sql Server 2008 R2)中创建仪表板。如果建筑物房间在过去30天内已经过深度清洁,或者如果超过30天,则需要红色,以突出绿色。我们没有跟踪机制,我们在30天内多次清理同一房间,我们不希望如此。不确定如何编写Sql语句?

Table2
Bldg varchar(40),
BldgRoom varchar(40),
CleanDateTime DateTime ,

这是我经过数小时研究后得到的最接近的。

select distinct Bldg, BldgRoom,  cleandatetime
FROM  Table2
where Table2.Bldg = @Bldg

返回每个房间的多个红色和绿色。我想展示前面的独特房间。 516红色或绿色,517红色或绿色,518红色或绿色等,但我不断得到重复的红色/绿色每个房间。

2 个答案:

答案 0 :(得分:0)

您需要选择最近最近干净日的建筑物和房间,而不是所有结果。

SELECT Bldg, BldgRoom, MAX(CleanDateTime)
FROM Table2
WHERE Table2.Bldg = @Bldg
GROUP BY Bldg, BldgRoom

答案 1 :(得分:0)

您应该可以按Bldg进行分组,并比较每个组中的MAX(CleanDateTime)

SELECT 
    Bldg, 
    BldgRoom, 
    CASE WHEN DATEDIFF(day, MAX(CleanDateTime), GETDATE()) > 30 
         THEN 'Red'
         ELSE 'Green' 
    END AS CleanStatus
FROM Table2
WHERE Bldg = @Bldg
GROUP BY Bldg, BldgRoom

也可以<{1}}获取MAX(CleanDateTime)并在报告中进行日期比较。