【问题标题】:Get Top entries from a table based on some criteria根据某些条件从表中获取热门条目
【发布时间】:2010-02-15 03:18:56
【问题描述】:

我有一张表,可以说“TopicComments”,它记录了每个用户关于某个主题的每个 cmets。该表具有 TopicID 和 UserID 作为外键以及评论日期和评论文本。所以对于每条用户评论,都会有一条带有TopicID、UserID、DateTime和text的记录。

我想在 5 天内检索具有最多 cmets 的主题。我不是拥有最好的 SQL 技能的人,所以我有点卡在这里。任何帮助,将不胜感激。不确定我的问题是否有太多意义。

提前致谢。

【问题讨论】:

  • 您使用的是什么关系型数据库? MySQL? SQL Server?

标签: sql-server


【解决方案1】:

不提 RDBMS,让我们说 MS SQL

SELECT  TopicID,
        COUNT(1) TotalCount
FROM    TopicComments
WHERE   CommentDate BETWEEN @StartDate AND @EndDate
GROUP BY TopicID
ORDER BY TotalCount DESC

所以一个完整的例子看起来像

DECLARE @TopicComments TABLE(
        TopicID INT,
        UserID INT,
        CommentDate DATETIME
)

INSERT INTO @TopicComments SELECT 1, 1, '14 Feb 2010'
INSERT INTO @TopicComments SELECT 1, 1, '14 Feb 2010'
INSERT INTO @TopicComments SELECT 1, 2, '14 Feb 2010'
INSERT INTO @TopicComments SELECT 1, 2, '14 Feb 2010'

INSERT INTO @TopicComments SELECT 2, 1, '14 Feb 2010'
INSERT INTO @TopicComments SELECT 2, 1, '14 Feb 2010'
INSERT INTO @TopicComments SELECT 2, 2, '05 Feb 2010'

DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SELECT  @StartDate = '10 Feb 2010',
        @EndDate = '14 Feb 2010'

SELECT  TopicID,
        COUNT(1) TotalCount
FROM    @TopicComments
WHERE   CommentDate BETWEEN @StartDate AND @EndDate
GROUP BY TopicID
ORDER BY TotalCount DESC

结果

TopicID     TotalCount
----------- -----------
1           4
2           2

选择 TOP 1 则为

SELECT  TOP 1
        TopicID,
        COUNT(1) TotalCount
FROM    @TopicComments
WHERE   CommentDate BETWEEN @StartDate AND @EndDate
GROUP BY TopicID
ORDER BY TotalCount DESC

编辑

使用类似的东西

DECLARE @StartDate DATETIME,
        @EndDate DATETIME

SET     @EndDate = DATEADD(D, 0, DATEDIFF(D, 0, GETDATE())) --returns only the date part of GETDATE()
SET     @StartDate = @EndDate - 5

【讨论】:

  • 谢谢,现在看起来很容易 :) 。我如何使用@startDate=GetDate() 而@enddate 将是GetDate()-n 天?
【解决方案2】:

您应该在 sql 语句中使用 GROUP BY 按 TopicID 对所有 cmets 进行分组,而不是 sum()

类似的东西^

SELECT TopicID, sum(UserID) from TopicComments WHERE DateTime > date 有 5 天的偏移 GROUP BY TopicID ORDER BY sum(UserID);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多