繁体   English   中英

在 SQL 查询中选择最近的行

[英]Selecting most recent rows in a SQL query

我想连接两个表,为表 1 中的 ID 值选择最近的行。

即对于表 1 中的每个 ID 值,仅返回最近添加的 ID 值行。 例如,表 1 如下所示:

Columns: ID-value, date-added,      other-information
row 1:    ID_1,    21/2/2020-12:30, other_newer_information...
row 2:    ID_1,    21/2/1990-12:30, other_older_information...

因此,如果在此表中两次找到相同的 ID 值,则仅返回最近的条目,即上述情况下的第 1 行。

然后,我想将这些行与第二个表中存在的信息连接起来。 例如,表 2 看起来像这样:

Columns: column-present-in-table-1, another-column-present-in-table-1, other-columns
row 1:   some_data,                 some_more_data...                  additional data
row 2:-  some_data, infor_2:        some_more_data...                  additional data
etc
  • 我下面的 sql 查询按预期工作以加入两个表
  • 但我无法解决的是如何在多个日期输入重复的 ID 值时仅返回表 1 中的最新行
  • 也不确定日期过滤是否应该作为SELECT的一部分发生,或者在第一次从表 1 中获取数据时发生

从 StackOverflow 的其他地方看,建议是MAX(date_time)之类的东西 - 但我的理解是这只会返回最大日期时间值,而不是最近的行 - 如果我错了,请纠正我。 我的查询看起来像这样:

SELECT
    id_1,
    info_1,
    info_2,
    date_time,
    info_3,
    info_4,
    max(info_3),
    min(info_4)
FROM table_1
INNER JOIN table_2
    ON table_1.info_1 = table_2.infor_1
    AND table_1.info_2 = table_2.infor_2
    WHERE id_1 in ("id1", "id2")
    AND info_3 = "10"
    GROUP BY id_1, info_1, info_2, info_3, info_4
    ORDER BY id_1, id_2, date_time DESC

StackOverflow 上的其他建议: SELECT TOP id_1...min(info_4) (给出语法错误), ORDER BY id_1... date_time DESC LIMIT 1 (仅返回一行 - 即最近的日期时间)。

ROW_NUMBER() OVER (PARTITION BY id, ORDER BY date_time) AS 'row_number'返回一个行号,而不是最近的行。

因此,如果在我的表中两次找到相同的 ID 值,则仅返回最近的条目,即上述情况下的第 1 行。

您可以使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by id order by date_time desc) as seqnum
      from mytable t
     ) t
where seqnum = 1;

我真的不知道您的查询与您的问题有什么关系。 如果您的“表”确实是查询的结果,那么只需使用 CTE 或子查询:

with t as (
      <your query here>
     )
<query with row_number here>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM