【问题标题】:SQL select MAX value from last daySQL 选择最后一天的 MAX 值
【发布时间】:2013-11-20 22:27:31
【问题描述】:

我有一个包含 DateTime 和 Value 列的表。我需要从最后一天(最新)中选择最大值。我能想到的最好的方法是 3 步过程:

  1. SELECT MAX(DateTime) FROM MyTable
  2. 去掉日期时间中的时间部分,存储日期
  3. SELECT MAX(Value) FROM MyTable WHERE DateTime>date

有没有更好的方法来做到这一点?

【问题讨论】:

  • 你使用的是什么 rdbms?
  • @FreshPrinceOfSO 检查标签
  • @swasheck 谢谢。至少附近有人知道它是什么。

标签: sql firebird


【解决方案1】:

您在一个查询中的三个步骤将是

SELECT MAX(Value)
FROM MyTable
WHERE DateTime >= CAST( (SELECT MAX(DateTime)FROM MyTable) AS DATE)

现在查找最大日期可能是一个非常昂贵的查询,因此如果您实际上是在昨天的最大值之后,那么您应该改用CURRENT_DATE,即

WHERE DateTime >= ( CURRENT_DATE - 1 ) AND DateTime < CURRENT_DATE

【讨论】:

  • 该条件还将选择今天(或明天)的字段。
  • 因为我们选择了最大日期,所以不能有“明天的记录”。但是 CURRENT_DATE 的查询需要修复,没错。
  • 谢谢@ain!我一直在寻找 CAST 的诀窍。
  • @ain 这取决于DateTime 中的内容,也可能是“计划日期”或其他内容。
【解决方案2】:

如果你的意思是今天的最高值,那么你可以使用:

SELECT MAX(value)
FROM MyTable
WHERE CAST(DateTime AS DATE) = CURRENT_DATE

【讨论】:

  • 也许我不够清楚。我不是指今天的最高价值。我的意思是日期时间最高的一整天中的最高值。那一天可能是今天,那一天可能是昨天,那一天可能是上周。
【解决方案3】:

你能做到吗?

SELECT MAX(Value)
FROM MyTable
WHERE DateTime IN (
    SELECT MAX(DateTime)
    FROM MyTable
)

【讨论】:

  • 我想他想要昨天的最后一个值("from the last day")。
  • 如果最后一天有多个值会怎样?
  • @OtoZars:应该选择最后一天的最大值。
  • @voithos:它选择最后一个而不是最大的值。如果最大值的 DateTime 较小​​,则不选择它。
  • @OtoZars:那我误解了你在问什么。您说“我需要从最后一天(最新)中选择最大值。”这意味着什么?什么是“最后一天”?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 2021-09-18
  • 1970-01-01
  • 2021-09-23
  • 2011-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多