【问题标题】:Distinct particular field in select query选择查询中的不同特定字段
【发布时间】:2020-12-14 13:40:21
【问题描述】:

我有以下示例值的表格。

|Id|Keyword|insertedon|
|:-|:------|:---------|
|1 | abcd  | 13/12/20 |
|2 | cdef  | 14/12/20 |
|3 | abcd  | 14/12/20 |
|4 | defg  | 14/12/20 |

在上表中,我需要按 desc 顺序插入的关键字顺序的不同值。 我需要最近的前 5 名结果。 预期结果:

defc
abcd
cdef

请告诉我如何实现这一目标。

【问题讨论】:

  • abcd 是否应该在其第一个或最后一个插入值之后排序?
  • 我需要最近的前 5 个不同的值,

标签: sql sql-server sql-order-by


【解决方案1】:

您在 SQL Server 中使用TOP(5) 获得前 5 个结果。您可以按关键字的最后一个insertedon 日期对关键字进行排序:

select top(5) keyword
from mytable
group by keyword
order by max(insertedon) desc;

【讨论】:

    【解决方案2】:

    如果您正在寻找基于插入列的最新条目,您可以使用 group by 子句找到,如下所示:

    select keyword, max(insertedon)
    from table
    group by keyword
    order by 2 desc
    

    【讨论】:

      【解决方案3】:

      你可以使用select distinct:

      select distinct keyword
      from t;
      

      如果你想要一整行,你可以使用row_number():

      select t.*
      from (select t.*,
                   row_number() over (partition by keyword order by newid()) as seqnum
            from t
           ) t
      where seqnum = 1;
      

      编辑:

      对于已编辑的版本,您可以使用:

      select distinct keyword
      from (select top (5) keyword
            from t
            order by insertedon desc
           ) k
      

      【讨论】:

      • 我需要最近的前 5 个结果。
      【解决方案4】:

      根据日期列的降序给出行号,然后选择行号为1的行。

      查询

      ;with cte as(
        select [rn] = row_number() over(
          partition by [keyword]
          order by [insertedon] desc, [id] desc
        )
      )
      select [keyword] from cte
      where [rn] = 1;
      

      【讨论】:

        【解决方案5】:

        您可以使用如下解析函数:

        select t.* from 
           (select t.*,
                   row_number() over (partition by keyword order by insertedon desc) as rn,
                   Dense_rank() over (order by insertedon desc) as dr
              from t ) t where rn = 1 and dr <= 5;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-03
          • 1970-01-01
          • 2020-10-17
          • 1970-01-01
          相关资源
          最近更新 更多