Sql server 如何从每个客户机的表中仅获取1个值,并从相同但具有不同值的表中获取所有值
我需要查询以生成where,如果客户端的状态为“5”,则我获取所有行,如果客户端只有“6”状态,则我仅从中获取一个最新状态Sql server 如何从每个客户机的表中仅获取1个值,并从相同但具有不同值的表中获取所有值,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我需要查询以生成where,如果客户端的状态为“5”,则我获取所有行,如果客户端只有“6”状态,则我仅从中获取一个最新状态 CREATE TABLE #test ( ClientID INT NULL, StatusID INT NULL, Date DATE null ) INSERT INTO #test ( ClientID, StatusID, Date ) SELECT 1001,5,'20190909' UNION all SELECT 1001,5,'20
CREATE TABLE #test (
ClientID INT NULL,
StatusID INT NULL,
Date DATE null
)
INSERT INTO #test
(
ClientID,
StatusID,
Date
)
SELECT 1001,5,'20190909'
UNION all
SELECT 1001,5,'20190908'
UNION all
SELECT 1002,5,'20190909'
UNION all
SELECT 1002,6,'20190910'
UNION all
SELECT 1003,6,'20190909'
UNION all
SELECT 1003,6,'20190910'
如果最新的平均最大日期,则:
select top 1 *
from
test
where StatusID=6
union all(
select * from
test
where StatusID=5)
order by Date desc
选中此复选框,您的问题表明,如果某个客户端有任何StatusID=5的行,那么您需要该客户端的所有行。如果客户端只有StatusID=6行,则只需要最新的行 下面的SQL实现了这一点
WITH T
AS (SELECT *,
HasStatus5 = SIGN(SUM(IIF(StatusID = 5, 1, 0)) OVER (PARTITION BY ClientID)),
LatestDate = MAX(Date) OVER (PARTITION BY ClientID)
FROM #test
WHERE StatusID IN ( 5, 6 ))
SELECT ClientID,
StatusID,
Date
FROM T
WHERE HasStatus5 = 1
OR Date = LatestDate
您能提供输入和预期输出吗?您好,它将为ClientID=1002的客户端显示2行,我如何修改脚本以仅显示5行,这是我的难题