【问题标题】:SQL: Order by date and distinct Number without losing fieldsSQL:按日期和不同的数字排序而不丢失字段
【发布时间】:2018-07-27 03:13:48
【问题描述】:

我对 SQL 的了解不是最好的,但我需要一个快速的解决方案。我有一张桌子

number     | date       | text

1          | 2018-01-13 | A

2          | 2018-01-15 | B

1          | 2018-02-15 | C

现在我需要根据日期删除输出(选择)中的重复值“数字”。它应该是这样的:

number     | date       | text

2          | 2018-01-15 | B

1          | 2018-02-15 | C

我试过了

SELECT DISTINCT number, date ORDER BY date DESC FROM table

问题是我现在错过了输出中的“文本”字段。我也试过了

SELECT * DISTINCT(SELECT * number ORDER BY(date) DESC) FROM table

有什么想法吗?

【问题讨论】:

标签: sql sql-server sql-server-2005


【解决方案1】:

一个选项使用ROW_NUMBER

SELECT number, date, text
FROM
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn
    FROM yourTable
) t
WHERE rn = 1;

【讨论】:

  • 感谢您的快速回答。我有点困惑。在此声明中我必须在哪里添加我的“表格”?
  • 您需要在内部SELECT查询中添加FROM子句
  • @user3772108 我忽略了在内部查询中添加FROM 子句。
  • 很好的解决方案,再次感谢,但不幸的是,SSIS VS 2008 不支持。
  • @user3772108 ROW_NUMBER 绝对支持 SQL Server 2008 (see here)。我没有看到你用 2005 标记。如果你真的在使用这个旧数据库,那么你应该接受接受的答案。如今,很少有人使用不支持ROW_NUMBER 的 SQL Server 版本。
【解决方案2】:

您可以使用以下查询来实现它:

SELECT t1.number, t1.date, t1.text
FROM yourTable t1
INNER JOIN
(
     SELECT number, MAX(date) AS max_date
     FROM yourTable
     GROUP BY number
) t2
    ON t1.number = t2.number AND
       t1.date = t2.max_date;

【讨论】:

  • “火车”在做什么?
  • 搞错了
  • 它也有效!感谢您的回答!我只需要将最后一个 'r =r.date' 更改为 '= r.MaxDate'。不知道为什么..
  • @user3772108,由于列别名是“max_date”,我们需要在JOIN中使用它...谢谢
  • 哦,我错过了。谢谢
【解决方案3】:

使用下面的查询这将满足你的要求

选择数字、日期、文本 从 ( SELECT *, ROW_NUMBER() OVER (PARTITION BY number ORDER BY date DESC) rn 从测试 ) 吨 其中 rn = 1;

【讨论】:

    【解决方案4】:

    只需使用窗口函数即可:

    create table #TEST ([NUMBER] int, [DATE] date, [TEXT] char(1))
    
    insert into #TEST values (1, '2018-01-13', 'A'), (2, '2018-01-15', 'B'), (1, '2018-02-15', 'C')
    
    SELECT DISTINCT [NUMBER]
        , FIRST_VALUE([DATE]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [DATE]
        , FIRST_VALUE([TEXT]) OVER (PARTITION BY [NUMBER] ORDER BY [DATE] DESC) AS [TEXT]
     FROM #TEST
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-20
      • 1970-01-01
      • 1970-01-01
      • 2018-04-25
      • 2021-03-24
      相关资源
      最近更新 更多