首先,非常感谢您的SQLFIDLE。
使用标准方法(Tabibitosan)解决间隙和孤岛问题,使用
row_number()
SQL Fiddle
PostgreSQL 9.6架构设置
:
create table bar (
id bigint not null,
date timestamp without time zone,
foo text
);
insert into bar (id, date, foo) values
(1, '2017-12-28 17:54:02', 'abc'),
(1, '2017-12-28 17:53:30', 'abc'),
(2, '2017-12-28 17:50:13', 'xyz'),
(2, '2017-12-28 17:44:35', 'xyz'),
(2, '2017-12-28 17:30:00', 'abc'),
(1, '2017-12-28 17:25:15', 'abc'),
(2, '2017-12-28 17:21:20', 'abc');
查询1
:
SELECT MAX (id) AS id,
foo,
COUNT (*) AS "count"
FROM (SELECT b.*,
ROW_NUMBER () OVER (ORDER BY date DESC)
- ROW_NUMBER () OVER (PARTITION BY id ORDER BY date DESC)
seq
FROM bar b) t
GROUP BY foo, seq, id
ORDER BY MAX(DATE) DESC
Results
:
| id | foo | count |
|----|-----|-------|
| 1 | abc | 2 |
| 2 | xyz | 2 |
| 2 | abc | 1 |
| 1 | abc | 1 |
| 2 | abc | 1 |