【发布时间】:2021-03-05 22:35:00
【问题描述】:
我有一个名为 test 的表,并且只想选择它直到 1st 相同 id ('1144QQT') 的删除语句上方的行。所以,从 2021-03-01 到 2021-06-02(只有粗体)。因此,这不包括带有删除语句的行。它确实包含更多不同类型的 id 和更多相同类型的 id。
表架构:
CREATE TABLE test(
id BIGINT PRIMARY KEY NOT NULL,
barcode_id VARCHAR NOT NULL,
date DATE NOT NULL,
keyword VARCHAR NOT NULL
);
INSERT INTO test
VALUES
(1, '1144QQT', '2021-03-01'::date, 'insert'),
(2, '1144QQT', '2021-03-01'::date, 'insert'),
(3, '1144QQT', '2021-03-01'::date, 'insert'),
(4, '1144QQT', '2021-03-01'::date, 'insert'),
(5, '1144QQT', '2021-03-01'::date, 'insert'),
(6, '1144QQT', '2021-03-01'::date, 'insert'),
(7, '1144QQT', '2021-03-01'::date, 'insert'),
(8, '1144QQT', '2021-03-01'::date, 'insert'),
(9, '1144QQT', '2021-03-01'::date, 'insert'),
(10, '1144QQT', '2021-03-01'::date, 'insert'),
(11, '1144QQT', '2021-03-01'::date, 'insert');
| id | barcode_id | date | keyword |
|---|---|---|---|
| 1 | 1144QQT | 2021-03-01 | insert |
| 2 | 1144QQT | 2021-03-02 | adjust |
| 3 | 5588aTT | 2021-03-03 | delete |
| 4 | 4477aTT | 2021-03-04 | adjust |
| 5 | 5588aTT | 2021-03-05 | adjust |
| 6 | 1144QQT | 2021-03-06 | adjust |
| 7 | 1144QQT | 2021-03-07 | delete |
| 8 | 1144QQT | 2021-03-08 | insert |
| 9 | 1144QQT | 2021-03-09 | adjust |
| 10 | 1144QQT | 2021-03-10 | delete |
| 11 | 4477aTT | 2021-03-11 | delete |
所以,我期待的输出是这样的:
| id | barcode_id | date | keyword |
|---|---|---|---|
| 1 | 1144QQT | 2021-03-01 | insert |
| 2 | 1144QQT | 2021-03-02 | adjust |
| 6 | 1144QQT | 2021-03-06 | adjust |
如何使用 postgres 做到这一点?是否可以使用窗口函数来做到这一点?
【问题讨论】:
-
您似乎已经知道存在窗口函数并且可以在此处使用它们,因为您对其进行了标记(好吧,您尝试了但在单词之间添加了一个空格而不是连字符,我为您更正了)。所以你应该继续自己尝试一些东西。如果这不能解决问题,那么edit 问题并包含您的合理 尝试以及详细 解释(错误消息、意外结果等) .).
-
@Kraigolas 哈哈哈是的,我想我知道 where 语句是什么。我编辑了问题以使其更清楚,或者我希望如此。
-
@sticky bit 我的意思是我试过了。该语句基本上是更大查询的子查询。所以,我只是想简化它。虽然想不通。
标签: sql postgresql window-functions