【问题标题】:List values with MaxDate使用 MaxDate 列出值
【发布时间】:2021-03-05 00:02:39
【问题描述】:

我正在尝试创建 ie 查询以显示具有 MAX DATE 的项目,但我不知道如何! 按照脚本和结果:

Select
    results.severity As "Count_severity",
    tasks.name As task,
    results.host,
    to_timestamp(results.date)::date
From
    tasks Inner Join
    results On results.task = tasks.id
Where
    tasks.name Like '%CORP 0%' And
    results.severity >= 7 And
    results.qod > 70 

我只需要显示每个任务的最后日期。 你能帮帮我吗?

【问题讨论】:

  • 您使用的是哪个 dbms? (也许是 Postgresql,还是真的是 Oracle?)
  • 我正在使用 Postgresql

标签: sql postgresql datetime sql-order-by greatest-n-per-group


【解决方案1】:

您似乎正在使用 Postgres(正如使用强制转换运算符 :: 所建议的那样)。如果是这样 - 我正确地跟着你 - 你可以使用distinct on

select distinct on(t.name) 
    r.severity, t.name as task, r.host, to_timestamp(r.date::bigint)::date
from tasks t
inner join results r on r.task = t.id
where t.name like '%corp 0%' and r.severity >= 7 and r.qod > 70 
order by t.name, to_timestamp(r.date::bigint)::date desc

这保证每个任务只有一行;选择哪一行是由order by 子句控制的,所以上面得到了date 最大的行(时间部分分开)。如果存在平局,则未定义返回哪一行。如果 order by 子句与我的理解不同,您可能希望根据您的确切要求调整它。


另一方面,如果您想要领带,则使用窗口函数:

select *
from (
    select r.severity, t.name as task, r.host, to_timestamp(r.date::bigint)::date,
        rank() over(partition by t.name order by to_timestamp(r.date::bigint)::date desc) rn
    from tasks t
    inner join results r on r.task = t.id
    where t.name like '%corp 0%' and r.severity >= 7 and r.qod > 70 
) t
where rn = 1

【讨论】:

  • 我正在使用 PostgreSQL,但我需要一些不同的东西,我添加了一个新图像来更好地解释......我需要列表,只有每个类别的最后日期(任务名称)的项目
  • 我固定为 to_timestamp(r.date)::date ,但我的查询结果为空
  • @luizespinola:我调整了查询​​以处理 unix 时间戳。
猜你喜欢
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多