【问题标题】:remove duplicate values of only one column value from all the available columns in sql query从sql查询中的所有可用列中删除仅一个列值的重复值
【发布时间】:2015-02-24 11:41:51
【问题描述】:

我有一个包含三列的 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'

EDIT-1 我的输出是-

在第一列 29.98 重复三次。我只想要与 29.98 对应的行中的任何一个。如何做到这一点??

【问题讨论】:

    标签: sql-server distinct-values


    【解决方案1】:

    这将为 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】:

    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
    

    【讨论】:

    • ,请看我的编辑。当我按照你所说的应用 sql 查询时,我也会得到第一列的重复值,即我的光束电流。我只想要一行对应一个值束流。
    • 对,所以您要为每个 beam_current 值而不是每个 logtime, beam_energy 组寻找一行。我已经更新了答案。
    • 如果我有以下查询,那么如何转换成上面类似的查询。查询是 选择 b.logtime, b.beam_current, b.beam_energy,CASE 当 a.st2_vs2_bag9_onoff=0 然后 c.st2_vs2_bag9_rb else '0' END as st2_vs2_bag9_rb from INDUS2_BDS.dbo.DCCT b INNER JOIN(INDUS2_VACUUM.dbo. main_vacuum_analog c 内部连接 ​​INDUS2_VACUUM.dbo.main_vacuum_status a on c.logtime=a.logtime) ON a.LOGTIME = b.LOGTIME and (b.beam_current like '%9.96' etc) and b.logtime between '' and '' b .beam_current in('10','20') 和 (b.beam_energy between '' and '' ) 按 b.logtime 排序
    • 如何将上述sql查询应用于sql中的内部连接和case语句。我在上面的语句中给出的查询示例。
    • numbered_rows 是什么意思??
    【解决方案3】:

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

    Group by 也不起作用,因为它会在 group by 关键字之后从左到右对列进行分组。所以无论如何你都会得到相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-23
      • 2017-08-14
      • 2011-01-31
      • 2023-02-04
      • 2018-07-15
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多