【问题标题】:select all rows from a table with 50+ columns where the Updated Date is MAX从更新日期为 MAX 的 50 列以上的表中选择所有行
【发布时间】:2020-07-24 13:56:51
【问题描述】:

我有一个包含 50 多列的表,我想根据 MA​​X 更新日期查询这些列。我知道的唯一 SQL 查询如下

    SELECT column1, column2, column3,..column50, max(updated_date)
    FROM table
    GROUP BY column1, column2, column3,..column50

我想知道是否有一种简单的方法可以选择所有列,而不是在 SELECT/GROUP BY 部分手动键入它们?

【问题讨论】:

  • 您使用的是哪种 DBMS 产品? “SQL”只是所有关系数据库都使用的一种查询语言,而不是特定数据库产品的名称。请为您正在使用的数据库产品添加tagWhy should I tag my DBMS
  • 这种问题可能是架构设计不佳的症状
  • 为什么有 50 列?
  • @Strawberry 50 没那么大。在我当前的项目中,我正在使用具有 100 列的表。最大的是 700 列。不幸的是,我们并不是都可以设计我们必须使用的数据库。

标签: sql date max


【解决方案1】:

你可以使用窗口函数:

select t.*
from (select t.*,
             row_number() over (partition by column1, . . . order by updated_date desc) as seqnum
      from t
     ) t
where seqnum = 1;

【讨论】:

  • 谢谢。我是否必须在 Partition by 部分中手动键入所有 50 列?
  • @JaneyJane 。 . .是的,我没有看到替代方案。另一方面,你在你的版本中输入了两次,所以这是一个简化。另外:您可以使用元数据表构建列表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多