在列中命名元组

时间:2014-04-09 15:40:32

标签: postgresql

我正在尝试创建一个引用pgsql中另一个视图的视图。此新视图将查找列的最大和最小日期值。我想打印出一个单独的列“status”,即max和min

到目前为止

代码,没有尝试过标签:

create or replace view Max_Min(status, name, employer, date)
as
SELECT * FROM another_view
WHERE date = (SELECT MAX(date) FROM another_view)
OR date = (SELECT MIN(date) FROM another_view)
;

如何使用“最大值”和“最小值”字符串填充状态?

1 个答案:

答案 0 :(得分:0)

这应该这样做,并且可能更快,并且只需要对表进行一次扫描:

select t.*,
       case 
         when t.date = t.max_date then 'max. date'
         else 'min. date'
       end as status
from (
  select av.*,
         min(av.date) over () as min_date,
         max(av.date) over () as max_date,
  from another_view av
) t
where date in (min_date, max_date)

顺便说一下:date是一个可怕的名字。不仅因为它也是一个保留字,更重要的是因为它没有记录列包含的内容。是“结束日期”,“开始日期”,“雇用日期”,“截止日期”,......?