无法使用不同的命令在 SQL 中获取不同的记录

Unable to get distinct records in SQL with distinct command

我使用以下查询从 table

中获取不同的记录
 SELECT distinct UFT
      ,ID
      ,NUM
      ,CONVERT(VARCHAR(19), UFT, 120) AS FTC
      ,CONVERT(VARCHAR(19), TIMESTAMP, 120) as TIMESTAMP
      ,CONVERT(VARCHAR(19), UIT, 120) AS UIT
      ,RANGE
      ,FORCE/1000/2 as FORCE
      ,CONVERT(VARCHAR(19), LFT, 120) as LFT
      ,CONVERT(VARCHAR(19), LIT, 120) as LIT
  FROM TABLE1
  where ID = 2 
  AND NUM = '144'
  AND UFT > '2014-01-01 00:00:00.000'
    and UFT <= '2015-01-01 00:00:00.000'
  order by FTC, UIT  desc

输出为

UFT ID  NUM FTC TIMESTAMP   UIT RANGE   FORCE   LFT LIT
2014-08-22 16:00:00.000 2   144 2014-08-22 16:00:00 2014-08-22 14:30:31 2014-08-22 11:40:54 5.00    0.792000000 2014-08-22 16:00:00 2014-08-22 12:40:54
2014-08-22 16:30:00.000 2   144 2014-08-22 16:30:00 2014-08-22 15:30:30 2014-08-22 12:40:48 5.00    0.836000000 2014-08-22 16:30:00 2014-08-22 13:40:48
2014-08-22 17:00:00.000 2   144 2014-08-22 17:00:00 2014-08-22 15:30:30 2014-08-22 12:40:48 5.10    0.880000000 2014-08-22 17:00:00 2014-08-22 13:40:48
2014-08-22 17:30:00.000 2   144 2014-08-22 17:30:00 2014-08-22 16:30:30 2014-08-22 13:40:24 5.20    0.932000000 2014-08-22 17:30:00 2014-08-22 14:40:24
2014-08-22 18:00:00.000 2   144 2014-08-22 18:00:00 2014-08-22 16:30:30 2014-08-22 13:40:24 5.30    0.984000000 2014-08-22 18:00:00 2014-08-22 14:40:24
2014-08-22 21:30:00.000 2   144 2014-08-22 21:30:00 2014-08-22 20:30:30 2014-08-22 17:40:52 6.40    1.656000000 2014-08-22 21:30:00 2014-08-22 18:40:52
2014-08-22 21:30:00.000 2   144 2014-08-22 21:30:00 2014-08-22 17:30:30 2014-08-22 17:07:40 6.60    1.860000000 2014-08-22 21:30:00 2014-08-22 18:07:40
2014-08-22 22:00:00.000 2   144 2014-08-22 22:00:00 2014-08-22 20:30:30 2014-08-22 17:40:52 6.40    1.704000000 2014-08-22 22:00:00 2014-08-22 18:40:52
2014-08-22 22:00:00.000 2   144 2014-08-22 22:00:00 2014-08-22 17:30:30 2014-08-22 17:07:40 6.70    1.904000000 2014-08-22 22:00:00 2014-08-22 18:07:40
2014-08-22 22:30:00.000 2   144 2014-08-22 22:30:00 2014-08-22 21:30:28 2014-08-22 18:40:49 6.50    1.764000000 2014-08-22 22:30:00 2014-08-22 19:40:49

尽管在 UFT 列上使用了 distinct,但我仍然在输出中找到多条记录。这可能是什么原因,有没有办法改进查询

正如已经为其他人解释的那样 distinct 对整行而不是单个列进行操作。

我添加了一个新列,可以让您消除排序中 UFT 值首次出现之后的行。我不得不猜测您想保留具有较早 timestamp 值的行,并且您还想在 FTC 上进行分区:在 row_number 表达式中适当更改。

with data as (
    SELECT
         UFT
        ,row_number() over (partition by FTC, UFT order by TIMESTAMP) as rn
        ,ID
        ,NUM
        ,CONVERT(VARCHAR(19), UFT, 120) AS FTC
        ,CONVERT(VARCHAR(19), TIMESTAMP, 120) as TIMESTAMP
        ,CONVERT(VARCHAR(19), UIT, 120) AS UIT
        ,RANGE
        ,FORCE/1000/2 as FORCE
        ,CONVERT(VARCHAR(19), LFT, 120) as LFT
        ,CONVERT(VARCHAR(19), LIT, 120) as LIT
    FROM TABLE1
    WHERE
            ID = 2 
        AND NUM = '144'
        AND UFT >  '2014-01-01 00:00:00.000'
        AND UFT <= '2015-01-01 00:00:00.000'
)
select * from data where rn = 1
ORDER BY
    FTC, UIT DESC

您的查询显示 UIT 以降序排列,但我没有看到与您提供的输出匹配的结果。不确定这是否重要。