Получить лучшие записи из таблицы на основе некоторых критериев - PullRequest
0 голосов
/ 14 февраля 2010

У меня есть таблица, скажем "TopicComments", которая записывает каждый комментарий от каждого пользователя по теме. Таблица содержит TopicID и UserID в качестве внешних ключей, а также дату и текст комментария. Таким образом, для каждого комментария пользователя будет запись с TopicID, UserID, DateTime и текстом.

Я хочу получить темы с наибольшим количеством комментариев в течение, скажем, 5 дней. Я не парень с лучшими навыками SQL, поэтому я застрял здесь. Любая помощь будет оценена. Не уверен, что мой вопрос имеет слишком много смысла.

спасибо заранее.

Ответы [ 2 ]

1 голос
/ 14 февраля 2010

Не говоря уже о СУБД, скажем, 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

EDIT

Используйте что-то вроде

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
0 голосов
/ 14 февраля 2010

Вы должны использовать GROUP BY в своем SQL-выражении, чтобы сгруппировать все комментарии по TopicID и чем сделать sum ()

Нечто подобное ^

ВЫБРАТЬ TopicID, сумма (UserID) из ТемаКомментарии, ГДЕ DateTime> дата со смещением 5 дней GROUP BY TopicID ORDER BY sum (UserID);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...