Предложение SQL Where, отличающееся для каждой строки - PullRequest
0 голосов
/ 29 мая 2018

У меня есть таблица, которая выглядит следующим образом enter image description here

Мне нужно подсчитать количество записей с определенным идентификатором ответа.
Однако мне нужно подсчитать, чтобы подсчитать только последний ответ пользователято есть.Мне нужно предложение where для динамической проверки каждой записи, что это последний ответ пользователя.

Это начало, которое у меня сейчас есть.
Как бы я на самом деле заставил его работать?

SELECT COUNT(DISTINCT social.useranswers.uid)
FROM useranswers
WHERE useranswers.answerid = $1;
    AND userAnswers.date = (
        SELECT MAX(userAnswers.date) 
        FROM userAnswers 
        WHERE uid=uid
        )

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Я сомневаюсь, что я вас правильно понимаю, объяснения не достаточно ясны, но вы можете использовать этот код, чтобы получить номер каждой последней записи uid с определенной id

CREATE LOCAL TEMPORARY TABLE tmp (
      id       CHAR(1),
      uid      VARCHAR,
      dt       DATE,
      storyid  CHAR(1),
      answerid CHAR(1)
    );

    --Just some sample data for testing purpose
    INSERT INTO tmp VALUES ('1', '1', '2018-05-20', '1', '1');
    INSERT INTO tmp VALUES ('2', '1', '2018-05-21', '1', '1');
    INSERT INTO tmp VALUES ('1', '1', '2018-05-22', '1', '1');
    INSERT INTO tmp VALUES ('4', '2', '2018-05-21', '1', '1');
    INSERT INTO tmp VALUES ('5', '2', '2018-05-22', '1', '1');
    INSERT INTO tmp VALUES ('6', '3', '2018-05-20', '1', '1');
    INSERT INTO tmp VALUES ('7', '4', '2018-05-21', '1', '1');
    INSERT INTO tmp VALUES ('8', '4', '2018-05-21', '2', '1');
    INSERT INTO tmp VALUES ('1', '4', '2018-05-22', '2', '1');

    SELECT
      count(*)
      , uid
    FROM (
           SELECT
             id
             , uid
             , dt
             , row_number()
               OVER (
                 PARTITION BY uid
                 ORDER BY dt DESC ) num
           FROM tmp
         ) tt
    WHERE num = 1 AND id = '1'
    GROUP BY uid;
0 голосов
/ 29 мая 2018

Вы можете использовать limit предложение внутри subquery:

select count(*)
from useranswers u
where id = (select u1.id
            from useranswers u1
            where u1.uid = u.uid
            order by date desc
            limit 1
           );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...