我怎样才能为每个客户从 table 中只获取 1 个值,并从相同但具有不同值的所有值中获取

How can i get only 1 value from table for each client and get all values from the same but with different value

我需要查询构建位置,如果客户端的状态为“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,'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'

如果 latest 表示 max(date) 那么 :

select top 1  *
from
 test
 where StatusID=6
union  all(

select * from 
test
 where StatusID=5)
order by Date desc

检查这个sqfiddle

您的问题是如果客户有任何行 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