【问题标题】:SQL Select latest post by postIDSQL 通过 postID 选择最新的帖子
【发布时间】:2011-10-11 11:56:12
【问题描述】:

我希望在发布最新消息时显示在页脚中。 例如:最后一个帖子,2011 年 7 月 23 日星期六下午 3:02

我正在使用 ASP.Net 4.0、Visual Studio 和 MSSQL Server Management Studio。

Sql 表

postID |创建后

19 | 2011 年 7 月 23 日星期六 01:02 p.m.

20 | 2011 年 7 月 23 日星期六下午 2:02

21 | 2011 年 7 月 23 日星期六下午 3:02

postID 是 Int 并且被设置为主键,并且自动递增。 postCreated 是 Varchar。

到目前为止我已经尝试过什么

从“表”中选择 max(postID)

这显示了最新的 postID,但我想扩展它以获取与该 ID 关联的最新 postCreated

任何帮助将不胜感激。

干杯

【问题讨论】:

    标签: asp.net sql sql-server select


    【解决方案1】:

    试试这个 sql 查询:

     SELECT * FROM Table WHERE postID = (SELECT max(postID) from Table)
    

    【讨论】:

    • LIMIT 不受 SQL Server 支持。请改用 TOP。
    • @Rick Liddle 很高兴知道!谢谢。
    • 这里不需要子查询。只需选择最上面一行,按日期降序排列。
    • @ShadowChaser ORDER BY 虽然比子查询慢。 SELECT max(postID) from Table 几乎是即时的,不需要硬盘访问,因为 postId 是(我假设)一个索引。
    • 是的,但通常无论如何都应该将发布日期编入索引。但是,如果我们假设它不是,则子查询仍然没有获得任何优于 TOP 1 的关键列的性能优势。两个查询的 SQL Server 执行计划完全相同 - SELECT、TOP、CLUSTERED INDEX SCAN。实际上,子查询版本由 SQL Server 优化器在内部更改为 TOP/ORDER BY。子查询的可读性较差,没有任何好处。
    【解决方案2】:

    SELECT TOP 1 * FROM Table ORDER BY postID DESC

    【讨论】:

    • 这是最有效的。它利用了主键。然而,这取决于按顺序发布的记录。或者更狭义地说,表中的最后一条记录是最近的帖子。
    【解决方案3】:
    select top 1 * from Table t order by t.postID desc
    

    【讨论】:

      【解决方案4】:
        Select tn.postCreated
          From table_name tn
         Where tn.postId = 
                (Select Max(postId)
                   From table_name);
      

      【讨论】:

        猜你喜欢
        • 2016-04-14
        • 2013-06-17
        • 1970-01-01
        • 1970-01-01
        • 2012-07-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-28
        相关资源
        最近更新 更多