【问题标题】:PLSQL query for getting all records with MAX datePLSQL 查询获取所有日期为 MAX 的记录
【发布时间】:2020-01-31 01:50:04
【问题描述】:

我正在处理一个超过 10 列的表格。其中一个列名是 ASAT,它的类型为 DATE(格式为 yyyy-mm-dd HH:MM:SS:mmm)。

我正在寻找一个返回最大日期的所有记录的 sql 查询。尝试在 java 中使用该查询进行 JDBC 调用。

我试过这个: Select * from tablename where ASAT in (select MAX(ASAT) from tablename).

但它没有返回任何记录。

非常感谢任何帮助。谢谢

【问题讨论】:

  • 只运行子查询时是否返回了预期的值?

标签: select plsql maxdate


【解决方案1】:

怎么样:

SELECT MAX(Asat) FROM TableA;
SELECT MAX(Asat) FROM TableA GROUP BY Asat;

【讨论】:

  • 那会从表中返回 MAX ASAT 值,对吧?但我正在寻找具有 MAX ASAT 值的所有记录。谢谢!
【解决方案2】:

当您自行加入时,我建议为表的每个副本设置别名。我个人之后会使用带有数字的表格字母,以防我需要跟踪它以进行更大的查询。

Select * 
from tablename t1 
where t1.ASAT = (
    select MAX(t2.ASAT) 
    from tablename t2
)

【讨论】:

  • 错误:服务器异常 [36e69a2e-f10d-4c74-8454-273d43c35cdb-5][line 4:11] 在输入 'MAX' 处没有可行的替代方案 使用该查询时出现该错误。
  • 请参阅stackoverflow.com/questions/14897599/… .. 该错误不是由于 SQL 格式错误造成的。
【解决方案3】:

如果我理解你的话,我相信你正在寻找这样的东西。首先构建一个包含主键和 MAX(ASAT) 的 CTE。然后加入它,选择主键与 MAX(ASAT) 行的主键匹配的位置。请注意,您的“ID”可能必须不止一列。

with tbl_max_asat(id, max_asat) as (
  select id, max(asat) max_asat
  from tablename
  group by id
)
select * 
from tablename t
  join tbl_max_asat tma
    on t.id = tma.id;

这个旧帖子刚刚弹出,因为它是今天编辑的。也许我的回答仍然会对某人有所帮助。 :-)

【讨论】:

    猜你喜欢
    • 2015-12-25
    • 2017-10-02
    • 2020-11-21
    • 2022-07-04
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多