我有一个表,其中包含日志并具有以下方案:
USER | DATE | LOG
x x x
...
现在,我想进行 ONE 查询以检索每个(USER, DATE)
对,其中DATE
是此用户的最新信息。
我在考虑像(伪):
这样的东西SELECT ... FROM (TABLE) ORDERED BY DATE, DISTINCT BY USER
但我不确定这是否会奏效。
DISTINCT
在此查询中采用第一个可能的日期是否正确,从而产生所需的结果?或者DISTINCT
查询中元素的顺序是未定义的?
如果是,我应该如何解决这个问题(这是我无法添加新表的情况,例如users
,例如,缓存那里的最新日期) ?
答案 0 :(得分:1)
现在,我想要进行一次查询 检索每个(USER,DATE)对, DATE是最新的 用户。
select user, max(date)
from yourtable
group by user
您可能想要添加ORDER BY user
。
由于 user 和 date 都是大多数SQL dbms的保留字,因此更有可能运行。
select "user", max("date")
from "yourtable"
group by "user";
答案 1 :(得分:1)
如果您的数据库支持窗口化,则可以使用
执行此操作SELECT user, date, log FROM
(SELECT user, date, log, row_number()
OVER (PARTITION BY user ORDER BY date DESC) AS rn) FROM table_name) AS subq
WHERE rn=1;
答案 2 :(得分:0)
它自己的DISTINCT不会做你想要的,因为你想要最大的PER USER日期,你需要做一个子查询。查询中的订单将确保您获得最大的日期。
SELECT DISTINCT USER
, DATE
, LOG
FROM TABLE AS T1
WHERE DATE = (SELECT TOP 1 DATE
FROM TABLE AS T2
WHERE T2.USER = T1.USER
ORDER BY DATE DESC)
答案 3 :(得分:0)
最简单的解决方案是
select user, max(date)
from tableName
group by user
这就是您所要求的 - 但如果您在查询中添加“log”,则需要使用子查询。