gpt4 book ai didi

sql-server - SQL 查询改进 - 使用 max 和 groupby 选择

转载 作者:行者123 更新时间:2023-12-02 07:53:21 24 4
gpt4 key购买 nike

问题


鉴于以下两个表格,我想为在给定时间范围内(例如 2010 年 2 月)发表最新(即最后)评论的帖子选择所有 ID。

查询结果应该只返回帖子 ID 1,因为帖子 ID 2 的最新评论超出了时间跨度过滤器的范围。

问题


我在下面创建了 SELECT 语句,它看起来是正确的,并且可以处理抛给它的所有测试用例。

但是,为了继续提高我的 SQL 技能,我正在询问社区是否有“更好”的方法可用于这种情况,关于改进现有语句的任何建议,和/或边缘情况不包括在内。

请注意,这是对实际表格的松散翻译,为了使问题更容易理解而进行了更改。对于它的值(value),我使用的是 SQL Server 2005。

表格


发布

Id    Text     Visible
1 Post 1 1
2 Post 2 1
3 Post 3 0
. ...
n Post n 1

评论

Id    Post_Id    Text                  CommentNumber    Timestamp
1 1 Comment 1, Post 1 1 2/3/2010
2 1 Comment 2, Post 1 2 2/4/2010
3 2 Comment 1, Post 2 1 3/1/2010
. . .
n m Comment n, Post m x xx/xx/xxxx

SQL命令


SELECT [Id],[Text]
FROM [Post]
WHERE [Id] IN (
SELECT comment1.[Post_Id]
FROM (
SELECT max([CommentNumber]) as maxComment,
[Post_id]
FROM [Comment]
GROUP BY [Post_id]
) as comment2
INNER JOIN [Comment] as comment1 on comment1.[Post_id] = comment2.[Post_id]
WHERE comment1.[Timestamp] BETWEEN '2/1/2010 00:00:00.000' AND '2/28/2010 23:59:59.999'
AND comment1.[CommentNumber] = comment2.maxComment
)
AND [Post].[Visible] = 1

奖励问题


是否可以使用 NHiberate 创建此查询(使用 Criteria API 或 HQL)?

最佳答案

SELECT
Post_Id
FROM
Comment
GROUP BY
Post_Id
HAVING
MAX(Timestamp) >= '2/1/2010'

HAVING 视为发生在 GROUP BY 上的 WHERE,对 进行操作分组结果集。

虽然不了解 NHibernate。

关于sql-server - SQL 查询改进 - 使用 max 和 groupby 选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2372917/

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