【问题标题】:Selecting the last entry in sql database for each id field为每个 id 字段选择 sql 数据库中的最后一个条目
【发布时间】:2013-11-12 13:03:28
【问题描述】:

大家好,我正在使用SQL server

我有一张表,其中包含有关汽车的完整列表以及这些汽车发生的事件。 我需要的是能够根据每辆车的 (Reg_No) 注册号为每辆车挑选出最后一个条目。

我有以下工作要做

Table name = UnitHistory
Columns    = indx (This is just the primary key, with increment) 
Transdate(This is my date time column) and have Reg_No (Unique to each vehicle) .

如果有帮助的话,大约有 45 辆带有车牌号的车辆?

我查看了不同的示例,但它们似乎都有另一个表可以使用。 请帮我。在此先感谢您的帮助

【问题讨论】:

    标签: sql


    【解决方案1】:
    WITH cte 
    AS
    (
         SELECT *,
             ROW_NUMBER() OVER
             (
                 PARTITION BY Reg_No
                 ORDER BY Transdate DESC
             ) AS RowNumber
         FROM unithistory
    )
    SELECT *
    FROM cte
    WHERE RowNumber = 1
    

    【讨论】:

    • 感谢分配的帮助。我现在正在运行该声明,并将随时通知您。再次感谢
    • 完美运行。谢谢大家,你们让我免于漫长的痛苦搜索。
    【解决方案2】:

    如果您只需要索引和 transdatem 并且它们都是增量的(我假设较晚的日期对应于更高的索引号),那么最简单的查询将是:

      SELECT Reg_No, MAX(indx), MAX(Transdate)
        FROM UnitHistory
    GROUP BY Reg_No
    

    如果您想要已知 Reg_No 的所有数据,您可以使用 Dd2 的答案

    如果您想要所有 Reg_No 及其数据的列表,则需要一个子查询

    【讨论】:

    • MAX(indx) 将始终返回编号最大的记录。
    • 不,不会。它将返回分组内的最高索引。
    • 我认为组内的最高索引可能不是最新的。好吧,如果您假设记录是按 Transdate 排序的,它将起作用。我知道不能保证记录顺序。我错了吗?
    • 只要插入Transdate作为记录插入的实际时刻并且indx确实是增量的,最高日期应该对应最高索引。但我同意我们没有足够的信息来安全地做出这个假设,我为什么提到“我假设以后的日期对应于更高的索引号”啊,而且,indx 只是一个具有自动增量的普通字段,而不是从 SQL 生成的索引号。我同意这个名字令人困惑:)
    • 感谢分配的帮助。我现在正在运行该声明,并将随时通知您。选择使用更详细的,因为我需要添加的信息。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2021-01-23
    • 2023-03-23
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    相关资源
    最近更新 更多