我有一个表格,其中存储了所有操作日志。它包含" user_id" (标记用户)," statement_id" (标记已经处理过的声明)," action_date" (标记行动时间)和" action_type" (标记已采取的行动)。用户可以处理许多可以执行许多操作的语句。
我需要生成一个查询,该查询将显示在特定时间(在2018年3月1日到2018年3月30日之间)处理的语句 - 我可以这样做。我的困难是限制结果。我的意思是如何限制结果:
Statements that were worked on: 30, 30, 30, 18, 18, 42, 42, 42
对此:
Statements that were worked on: 30, 18, 42
我尝试使用像这样的查询,但我没有专业。我发现很难理解一些限制SQL命令的概念。
SELECT * FROM action_log
WHERE user_id = 1
AND action_date >= 1519858800
AND action_date <= 1522447200
GROUP BY user_id
HAVING user_id = 1
ORDER BY id DESC
我将非常感谢任何帮助。
答案 0 :(得分:3)
我认为您正在寻找SELECT DISTINCT
:
SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
action_date >= 1519858800 AND action_date <= 1522447200
ORDER BY statement_id DESC;
使用UNIX_TIMESTAMP()
:
SELECT DISTINCT statement_id
FROM action_log al
WHERE user_id = 1 AND
action_date >= UNIX_TIMESTAMP('2018-03-01') AND
action_date <= UNIX_TIMESTAMP('2018-03-30')
ORDER BY statement_id DESC;
答案 1 :(得分:0)
我猜你只需要唯一的价值观。 在SQL中有一个特殊的声明。 Use SELECT DISTINCT
SELECT DISTINCT * FROM action_log WHERE user_id = 1 AND action_date >= 1519858800 AND action_date <= 1522447200 GROUP BY user_id HAVING user_id = 1 ORDER BY id DESC;
答案 2 :(得分:0)
您可以在两者之间用于比较action_date。你可以消除条件,因为它已经在哪里使用了。如果user_id = 1且HAVING user_id = 1,则结果相同。希望以下代码适合您。
pbt