我有一个带有此查询的心理障碍,我试图返回最大日期和最长时间并按身份进行排序。如果有人可以为这种类型的查询添加一双眼睛,那将非常感激。
数据集
Identity, Date, Time, Website
10, 5/10/15, 1, google.com
10, 5/10/15, 3, google.com
10, 5/10/15, 10, google.com
25, 5/11/15, 1, yahoo.com
25, 5/11/15, 15, yahoo.com
预期结果
10, 5/10/15, 10, google.com
25, 5/11/15, 15, yahoo.com
当前查询
SELECT DISTINCT *, MAX(datetime) as maxdate, MAX(time), identity
FROM identity_track
GROUP BY identity
ORDER BY maxdate DESC
答案 0 :(得分:1)
这样的东西?
select identity, max(date), max(time), website
from identity_track
group by website;
在这里演示:http://sqlfiddle.com/#!9/5cadf/1
您可以按照自己想要的任何字段进行排序。
此外,您发布的预期输出与您尝试执行的操作不符。
修改
根据其他信息更新了查询。
select t.identity, t.date, max(t.time), t.website
from t
inner join
(select identity, website, max(date) d
from t
group by identity, website) q
on t.identity = q.identity
and t.website = q.website
and q.d = t.date
group by t.identity, t.website, t.date
这个应该为您提供用户身份,他访问过的页面,他上次访问该页面的时间,以及他在上次访问中花费的最多时间。
答案 1 :(得分:1)
不要假设身份的所有记录都在同一天,例如如果实体有时间为1/1/15 5pm和1/2/15 2pm,那你得到1/2/15 5pm这是错误的。
我总是合并时间和日期,但如果你不能尝试这个:
select t.identity, t.website, MAX(t.time)
FROM t
INNER JOIN
(
select identity, max(date) as max_date
from t
group by identity;
) x
ON t.identity = x.identity
AND t.date = x.max_date
group by t.identity, t.website
首先,我们获取每个站点的最长日期。然后在那一天,获得最长时间。
希望这有帮助。