我正在尝试为某种调查问卷制定排名表。
每天16小时(下午4:00)提出问题,可在第二天17:59:59回答。该表必须显示参与者的位置,考虑到正确的答案是时间。
我的桌子将是那种:
+-------+---------+---------------------+
|userid | correct | timestamp |
+-------+---------+---------------------+
| 2 | 1 | 2018-02-07 16:00:01 |
| 1 | 1 | 2018-02-07 16:02:00 |
| 3 | 1 | 2018-02-07 17:00:00 |
| 1 | 0 | 2018-02-08 16:00:02 |
| 3 | 1 | 2018-02-08 16:00:05 |
| 2 | 0 | 2018-02-08 16:01:00 |
+-------+---------+---------------------+
现在我开始使用此查询:
SELECT `userid`, `correct `, `timestamp`,
count(correct) as count
FROM `results`
WHERE correct = 1
GROUP BY `userid `
ORDER BY count DESC, timestamp DESC
但我已经意识到这不是我想要的,因为排名必须是累积的,但要考虑几天。
有没有人知道我该怎么做?
来自Stackoverflow Portugal的用户建议使用此代码,但它也无效。
SELECT userid, SUM(correct),
SUM(TIMESTAMPDIFF(HOUR,(timestamp,CAST(CONCAT_WS(' ',date(timestamp), '17:59:59') as DATETIME)))) time
FROM results
GROUP BY userid
ORDER BY correct DESC, time
答案 0 :(得分:0)
请勿处理此日期时间(16h),这可能会更改,您的查询将丢失。 相反,您应该通过userid和questionnaire_id计算。为此:
然后正常计算:用户通过问卷
正确回答SELECT userid, questionnaireid ,
sum(correct) as total
FROM results r
INNER JOIN questionnaire q
ON r.questionnaireid = q.id
WHERE correct = 1
GROUP BY userid, questionnaireid
ORDER BY total DESC, id ASC