从sql查询中的所有可用列中删除仅一个列值的重复值

时间:2015-02-24 11:41:51

标签: sql-server distinct-values

我有一个包含三列的SQL查询。我想删除beam_current列中的任何重复值出口。如何这样做。我在sql-server2012中工作

我使用了Distinct但是我也得到了beam_current的重复值。 我的SQL查询是 -

select DISTINCT (beam_current), logtime, beam_energy 
from INDUS2_BDS.dbo.DCCT 
where logtime between '2014-08-09 01:13:03' and '2014-08-09 02:16:53'
      and (beam_current like '%9.96' 
           or beam_current like '%9.97' 
           ... etc ...) 
      and beam_energy between '550' and '552'

修改-1 我的输出是 -

enter image description here

在第一栏29.98重复三次。我只想要对应于29.98的行中的任何一行。如何做???

3 个答案:

答案 0 :(得分:6)

distinct关键字适用于整行(所有列),因此:

select DISTINCT (beam_current), logtime, beam_energy 

与:

相同
select DISTINCT beam_current, logtime, beam_energy 

与:

相同
select DISTINCT ((beam_current)), (logtime), (((((beam_energy)))))

您可以使用row_number()仅选择beam_energy每个值的最新行:

select  *
from    (
        select  row_number() over (
                    partition by beam_current
                    order by logtime desc) as rn
        ,       *
        from    INDUS2_BDS.dbo.DCCT 
        where   logtime between '2014-08-09 01:13:03' and '2014-08-09 02:16:53'
                and (beam_current like '%9.96' 
                    or beam_current like '%9.97' 
                    ... etc ...) 
                and beam_energy between '550' and '552'
        ) numbered_rows
where   rn = 1 -- Latest row per beam_current

答案 1 :(得分:4)

这将为beam_current的每个值返回1行:

;WITH CTE AS
(
SELECT
  row_number() over (partition by beam_current order by (select 1)) rn,
  beam_current, logtime, beam_energy 
FROM INDUS2_BDS.dbo.DCCT 
WHERE 
  logtime between '2014-08-09 01:13:03' and '2014-08-09 02:16:53'
  and (beam_current like '%9.96' or beam_current like '%9.97' 
       or beam_current like '%9.98' or  beam_current like '%9.99'
       or beam_current like '%0' or beam_current like '%_0.01' 
       or beam_current like '%_0.02' or beam_current like '%_0.03' 
       or beam_current like '%_0.04' or beam_current like '%_0.05' 
       or beam_current like '%_0.06') 
       and beam_energy between 550 and 552
)
SELECT beam_current, logtime, beam_energy 
FROM CTE
WHERE rn = 1

答案 2 :(得分:2)

对于beam_current的每个值,似乎单行组合是不同的。 如果你只是尝试     select Distinct(beam_current) from INDUS2_BDS.dbo.DCCT where .... 那么只有你才能获得这个独特的价值。

分组也不会起作用,因为它会按照关键字从左到右分组。所以无论如何你都会得到相同的结果。