返回表第一行与customer_id匹配的所有行



我可以做两个select查询:

  1. select top行customer_id
  2. 选择与上述customer_id
  3. 匹配的所有行

但是,我想知道我是否可以在单个查询中完成上述操作?

我知道可以使用子查询,如

SELECT * FROM customers
WHERE cust_id=(SELECT cust_id FROM customers LIMIT 1)

这是一种有效的方法,还是有更好的方法?

要求是归档属于随机cust_id的记录,或者它可能是最老的cust_id(使用Python中的aws lambda函数周期性运行)。因此,我想在单个事务中获取cust_id和具有相同cust_id的每其他行。

使用Postgres 10.5, DB表定义如下:

id BIGINT PRIMARY KEY,
cust_id VARCHAR(100) NOT NULL,
created TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
cust_data JSONB

样本输入

|id|cust_id|     cust_data          |     created        |
|--|-------|------------------------|--------------------|
|8 |cust9  |{"a": {"b": "c"}}       |25/11/2022  01:05:39|
|25|cust1  |{"x": "y"}              |05/12/2022  14:59:21|
|40|cust9  |{"d": {"b": {"c": "z"}}}|07/12/2022  11:29:14|
|87|cust2  |{"r": {"s": "t"}}       |13/12/2022  21:10:18|
|99|cust1  |{"p": "q"}              |20/12/2022  14:59:21|

预期输出

|id|cust_id|     cust_data          |     created        |
|--|-------|------------------------|--------------------|
|8 |cust9  |{"a": {"b": "c"}}       |25/11/2022  01:05:39|
|40|cust9  |{"d": {"b": {"c": "z"}}}|07/12/2022  11:29:14|

预期输出

|id|cust_id|     cust_data          |     created        |
|--|-------|------------------------|--------------------|
|25|cust1  |{"x": "y"}              |05/12/2022  14:59:21|
|99|cust1  |{"p": "q"}              |20/12/2022  14:59:21|

预期输出

|id|cust_id|     cust_data          |     created        |
|--|-------|------------------------|--------------------|
|87|cust2  |{"r": {"s": "t"}}       |13/12/2022  21:10:18|

在一次查询期间,我们只需要这些预期输出中的一个。还需要说明的是,此处创建的并不是创建该表时的实际时间戳,因为该表中的表项是从另一个表中复制的。所以我认为我们不能确定哪个cust_id拥有最古老的条目

你这样做是对的。

确保使用ORDER BY来确保cust_id不是随机的。

SELECT * FROM customers
WHERE cust_id=(SELECT cust_id FROM customers ORDER BY DATE LIMIT 1)

获取单个任意客户在单个查询中的所有行,WITH TIESPostgres 13

SELECT *
FROM   customers
ORDER  BY cust_id
FETCH  FIRST 1 ROWS WITH TIES;

如果表比较大,用索引来支持这个查询on(cust_id).

:

  • 获取最高值的顶部行(s),带领带

Postgres 10在2022年已经达到EOL,所以你需要尽快升级。

相关内容

  • 没有找到相关文章

最新更新