gpt4 book ai didi

SQL 按最后日期加入

转载 作者:行者123 更新时间:2023-11-29 12:31:31 25 4
gpt4 key购买 nike

这是一个不止一次在这里问过的问题,但是我找不到我要找的东西。我正在寻找连接两个表,其中连接表由按日期时间排序的最后一个寄存器设置,直到这里一切正常。

我的麻烦开始于连接表上有两条以上的记录,让我给你看一个例子

table_a
-------
id
name
description
created
updated

table_b
-------
id
table_a_id
name
description
created
updated

我一开始所做的是:

SELECT a.id,  b.updated
FROM table_a AS a
LEFT JOIN (SELECT table_a_id, max (updated) as updated
FROM table_b GROUP BY table_a_id ) AS b
ON a.id = b.table_a_id

直到这里,我得到的是 cols、a.idb.updated。我需要完整的 table_b 列,但是当我尝试向查询中添加新列时,Postgres 告诉我需要将我的列添加到 GROUP BY 条件中才能完成查询,并且结果不是我想要的。

我正在尝试找到一种方法来获取此列表。

最佳答案

DISTINCT ON或者是你的 friend 。这是一个语法正确的解决方案:

SELECT a.id, b.updated, b.col1, b.col2
FROM table_a as a
LEFT JOIN (
SELECT DISTINCT ON (table_a_id)
table_a_id, updated, col1, col2
FROM table_b
ORDER BY table_a_id, updated DESC
) b ON a.id = b.table_a_id;

或者,从 table_b 获取整行:

SELECT a.id, b.*
FROM table_a as a
LEFT JOIN (
SELECT DISTINCT ON (table_a_id)
*
FROM table_b
ORDER BY table_a_id, updated DESC
) b ON a.id = b.table_a_id;

此技术的详细说明以及此密切相关问题下的替代解决方案:
Select first row in each GROUP BY group?

关于SQL 按最后日期加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com