我有一份针对特定设施的特定问题的调查表。 每个月可以对设施进行一次(数据输入)监控。 现在我需要针对问题的最新数据(值) 但是如果没有针对任何问题的最新数据,我将遍历同月的以前的记录(以前的日期)。
我可以获取最新记录,但我不知道如何获取同一月ID的先前记录,没有最新数据。
我正在使用PostgreSQL 10。
表结构是
所需的输出是
答案 0 :(得分:0)
您可以尝试使用ROW_NUMBER
窗口函数来制作它。
SELECT to_char(date, 'MON') month,
facility,
idquestion,
value
FROM (
SELECT *,ROW_NUMBER() OVER(PARTITION BY facility,idquestion ORDER BY DATE DESC) rn
FROM T
) t1
where rn = 1
答案 1 :(得分:0)
SELECT DISTINCT
to_char(qdate, 'MON'),
facility,
idquestion,
first_value(value) OVER (PARTITION BY facility, idquestion ORDER BY qdate DESC) as value
FROM questions
ORDER BY facility, idquestion
first_value(value) OVER ...
为您提供窗框的第一个值。框架是一组facility
和idquestion
。在该组中,行按日期DESC排序。因此,无论是哪个日期,最后一个值都是第一个DISTINCT
过滤了绑定值(例如facility == 1
和idquestion == 7
有两个值)请注意:
“日期”是Postgres中的保留字。强烈建议重命名您的列,以避免出现某些麻烦。此外,在Postgres中,建议使用小写字母。