PostgreSQL查询包括WITH子查询

前端之家收集整理的这篇文章主要介绍了PostgreSQL查询包括WITH子查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从下表(命名状态)中,我需要在2015年年底之前提取状态为“01”的城镇代码.列status_date存储城镇更改其状态的日期.
gid  | town      | status  | status_date
-----+-----------+---------+-------------
1    | 86001     | 00      | 2000-01-01
2    | 86001     | 01      | 2016-03-01
3    | 86002     | 01      | 2000-01-01
4    | 86003     | 00      | 2000-01-01
5    | 86003     | 01      | 2015-03-01
6    | 86003     | 02      | 2015-09-01

我可以使用以下有点长的查询来实现这一点:

WITH tab AS (SELECT town,MAX(status_date) FROM status GROUP BY town)

  SELECT 
    t.town

  FROM tab t
    LEFT JOIN status s ON t.town = s.town AND t.max = s.status_date 

  WHERE t.max < '2016-01-01' AND s.status = '01' ;

结果是:

town   
-------
86002

关于如何使这个查询更简单的任何想法? WITH必不可少?

要创建用于测试的表:

CREATE TABLE status (gid serial NOT NULL,town CHARACTER VARYING(5),status CHARACTER VARYING(2),status_date DATE) ;

INSERT INTO status (town,status,status_date) VALUES
  ('86001','00','2000-01-01'),('86001','01','2016-03-01'),('86002',('86003','2015-03-01'),'02','2015-09-01') ;
您可以通过以下方式执行此操作:
select s.*
from (select distinct on (s.town) s.*
      from status s
      where s.status_date < '2016-01-01'
      order by s.town,s.status_date desc
     ) s
where status = '01';

查询获取截至2015年底的每个城镇的最新状态.外部查询然后选择那些为01的城市.

猜你在找的Postgre SQL相关文章