Прогрессивный счет с использованием запроса? - PullRequest
2 голосов
/ 02 июля 2010

Я использую этот запрос, чтобы

SELECT userId, submDate, COUNT(submId) AS nSubms
FROM submissions
GROUP BY userId, submDate
ORDER BY userId, submDate

получить общее количество представлений на пользователя на дату.
Однако мне нужно иметь прогрессивный счет для каждого пользователя, поэтому яможно увидеть, как их представления накапливаются с течением времени.

Возможно ли реализовать в запросе?

РЕДАКТИРОВАТЬ: Полученная таблица выглядит следующим образом:

  userId submDate nSubms
  1       2-Feb    1
  1       4-Feb    7
  2       1-Jan    4
  2       2-Jan    2
  2       18-Jan   1

Я хочучтобы создать это:

  userId submDate nSubms  progressive
  1       2-Feb    1           1
  1       4-Feb    7           8
  2       1-Jan    4           4
  2       2-Jan    2           6
  2       18-Jan   1           7

РЕДАКТИРОВАТЬ 2: Извините, что не упомянул это ранее, я не могу использовать:

  • Вызов хранимых процедур
  • Обновление /Удалить / Вставить / Создать запросы
  • Союзы
  • Ключевое слово DISTINCT

    , поскольку я использую инструмент, который не допускает их.

Ответы [ 3 ]

2 голосов
/ 02 июля 2010

Вы можете использовать самосоединение, чтобы получить все строки в одной и той же таблице с датой перед текущей строкой:

SELECT s0.userId, s0.submDate, COUNT(s0.submId) AS nSubms, COUNT (s1.submId) AS progressive
FROM submissions AS s0
JOIN submissions AS s1 ON s1.userId=s0.userId AND s1.submDate<=s0.submDate
GROUP BY s0.userId, s0.submDate
ORDER BY s0.userId, s0.submDate

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

1 голос
/ 02 июля 2010
Select S.userId, S.submDate, Count(*) As nSubms
    , (Select Count(*)
        From submissions As S1
        Where S1.userid = S.userId
            And S1.submDate <= S.submDate) As TotalSubms
From submissions As S
Group By S.userid, S.submDate
Order By S.userid, S.submDate
1 голос
/ 02 июля 2010

Лучшее решение для этого - сделать это на клиенте.
Это правильный инструмент для работы.Базы данных не подходят для такого рода задач

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