SQL 独特的不同列 1 而不是其他列

SQL Unique Distinct Column 1 and not the other columns

我正在尝试 运行 连接 2 个表的 sql 语句,然后在 ID 列上执行不同操作,运行s 一个 where 子句以将数据过滤到一个小时当天的问题。结果将显示一天中的一个小时,但会删除重复项,以便为我提供独特的记录,我已经看到许多帖子,有些有用,有些令人困惑。这是我目前所拥有的。

  select DISTINCT FinalID,finaltime,finalos
    from dbo.FinalList
    join dbo.Users on dbo.FinalList.FinalID = dbo.Users.usersid 
   WHERE FinalDate >='2014-07-01'
     and finaldate <='2014-07-01'
     and finaltime >='00:00:00'
     and FinalTime <= '00:59:59'
order by FinalDate asc, FinalTime asc 

如果我拿走 finaltime、finalos 并留下 select DISTINCT FinalID,我会得到正确的数字。但是我想查看来自 Finaltime 和 Finalos 的信息,但是一旦我添加这些信息,它就会尝试在这些列上进行区分,但我得到了不可靠的结果。我做子查询吗? ?

嗯,你必须决定你想要的值。

也许使用group by会提供你想要的:

select FinalID, min(finaltime), max(finaltime),
       min(finalos), max(finalos)
from dbo.FinalList join
     dbo.Users
     on dbo.FinalList.FinalID = dbo.Users.usersid 
where FinalDate >='2014-07-01' and
      finaldate <='2014-07-01' and
      finaltime >='00:00:00' and
      FinalTime <= '00:59:59'
group by FinalId;

Distinct(https://technet.microsoft.com/en-us/library/ms187831%28v=sql.105%29.aspx) 语句将 return 您的唯一行。也就是说,在您选择的列中是独一无二的。因此,如果其中一个 Col / Row 与另一个不同,那么它也会作为结果输出。您应该使用 MAX 或 Min,然后分组依据。

您没有说明如何在具有相同 ID 但 finaltimefinalos 具有不同值的各种记录中做出决定。

我将假设您的最后时间是您的最晚时间(最大)并且您想要与最后时间一起出现的 finalos 值。

;
WITH A as 
(
   select FinalID
       ,  Finaltime
       ,  Finalos
   from dbo.FinalList
     join dbo.Users 
        on dbo.FinalList.FinalID = dbo.Users.usersid 
   WHERE FinalDate >='2014-07-01'
     and finaldate <='2014-07-01'
     and finaltime >='00:00:00'
     and FinalTime <= '00:59:59'
 )
 ,  B as  
 (
     SELECT  A.FinalID
         ,   A.Finaltime
         ,   A.FinalOS
         ,   RowNumber = ROW_NUMBER() OVER (
                           PARTITION BY A.FinalID
                           ORDER BY FinalTime DESC
                         )
     FROM    A
 )
 SELECT  FinalID
    ,    FinalTime
    ,    FinalOS
 FROM    B
 WHERE   B.RowNumber = 1
 ORDER BY
        FinalTime
    ,   FinalOS

ETA:固定语法。