【问题标题】:SQL max without group by没有分组依据的 SQL 最大值
【发布时间】:2019-06-05 11:32:55
【问题描述】:

我想得到一个最大日期的行。我不能使用 group by,因为我需要检索该行中的所有数据。

我有这个:

ID     Date          Country
1      05/05/2019    US
2      05/06/2019    UK

我想得到这个:

ID     Date          Country
2      05/06/2019    UK

我已经尝试了以下方法,但它对我不起作用

select TOP 1 ID, Date, country
from table
order by Date desc

【问题讨论】:

  • 按数据排序e desc
  • 用您正在使用的数据库标记您的问题。您的查询应该可以工作(假设 data 是一个错字)。
  • 抱歉打错了(现在改了)。我的查询不起作用..

标签: sql group-by max oracle-sqldeveloper


【解决方案1】:

我不相信你。 Here 是一个 dbfiddle,它显示了样本数据中日期的三种不同解释:

  • 作为字符串
  • 作为 mm/dd/yyyy
  • 作为 dd/mm/yyyy

所有三个都产生相同的结果。

我怀疑您的实际数据更复杂,并且您过度简化了问题的示例。此外,我怀疑日期列存储为 string 而不是 date

作为一个字符串,你可能有一些影响排序的隐藏字符(例如前导空格)。

如果是这种情况,请修复数据类型,您的代码将正常工作。

【讨论】:

    【解决方案2】:

    这取决于您使用的数据库系统。

    在 Microsoft SQL Server 中,您可以使用 row_number() 函数:

    选择前 1 * 从事实出发 按 ROW_NUMBER() 排序(按 dateKey 排序)

    【讨论】:

      【解决方案3】:

      你可以试试这个吗?

      select Top 1 ID,Date, country from table where date = max(date)
      

      【讨论】:

        【解决方案4】:

        首先在[Date] 列中设置DATE or DATETIME 数据类型 然后试试这个代码:

        SELECT TOP 1 ID, [Date] , country FROM TableName ORDER BY Date DESC
        

        【讨论】:

          【解决方案5】:
          SELECT ID,Date,Country from TableName Where Date = MAX(Date) AND Rownum <= 1 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-10
            • 2013-05-24
            • 1970-01-01
            • 2020-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多