首页 / 问答 / 如何从SQL Server 2014数据库的表中查询每天最后插入的一条数据呢?

如何从SQL Server 2014数据库的表中查询每天最后插入的一条数据呢?

SQL SQL Server 829 次浏览
0

如题,如何从SQL Server 2014数据库的表中查询每天最后插入的一条数据呢?假如表的字段有:Id,Name,CreatedTime

数据表结构及示例数据如下:

CREATE TABLE MyTable (
    Id INT PRIMARY KEY IDENTITY(1,1),
    Name VARCHAR(50),
    CreatedTime DATETIME
);

INSERT INTO MyTable (Name, CreatedTime) VALUES ('John', '2022-02-21 08:00:00');
INSERT INTO MyTable (Name, CreatedTime) VALUES ('Alice', '2022-02-21 09:00:00');
INSERT INTO MyTable (Name, CreatedTime) VALUES ('Bob', '2022-02-21 10:00:00');
INSERT INTO MyTable (Name, CreatedTime) VALUES ('Tom', '2022-02-22 08:00:00');
INSERT INTO MyTable (Name, CreatedTime) VALUES ('Jane', '2022-02-22 09:00:00');
INSERT INTO MyTable (Name, CreatedTime) VALUES ('Lily', '2022-02-22 10:00:00');
回复 [×]
提交评论
请输入评论内容

2 个回答

  • 0

    可以使用窗口函数来实现从MyTable中查询每天最后插入的一条数据。

    以下是使用窗口函数的示例代码:

    解释一下上面的代码:

    首先,我们使用CTE(Common Table Expression)子句创建一个临时的查询结果集,命名为CTE

    CTE中,我们使用窗口函数ROW_NUMBER()来对每个日期(即Convert(date, CreatedTime))内的数据进行编号,按照CreatedTime的降序排序,这样每个日期内的编号1即为最后插入的数据。

    最后,我们在CTE中筛选出RowNum1的数据,即每个日期内最后插入的一条数据,输出它们的IdNameCreatedTime

    需要注意的是,这种写法在MyTable比较大时可能会影响性能,因为它会将整个表中的数据进行排序,而不是只处理每个日期的最后一条数据。因此,建议在MyTable中添加一个索引,包括CreatedTime和其它常用查询条件的列,以提高查询效率。

    Rector的个人主页

    Rector

    2023-02-22 回答

    • 0

      以下是使用CROSS APPLY的方式实现查询MyTable表中每天最后插入的一条数据的SQL语句,并输出查询结果:

      这个查询与前面提到的ROW_NUMBER()方式不同之处在于,它使用CROSS APPLY子查询来筛选出每天最后插入的一条数据,而不需要进行排序。

      具体来说,子查询使用了TOP 1来选择每天最后插入的一条数据,并按照CreatedTimeId两个字段进行倒序排序。在CROSS APPLY的帮助下,这个子查询将被应用到主查询的每一行数据上,从而得到了每天最后插入的一条数据的信息。

      输出结果如下:

      Id Name CreatedTime
      3 Bob 2022-02-21 10:00:00.000
      6 Lily 2022-02-22 10:00:00.000
      Rector的个人主页

      Rector

      2023-02-22 回答

      我来回答