MySQL子查询/查询问题

时间:2015-05-14 01:34:17

标签: mysql sql

我有一个带有此查询的心理障碍,我试图返回最大日期和最长时间并按身份进行排序。如果有人可以为这种类型的查询添加一双眼睛,那将非常感激。

数据集

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

2 个答案:

答案 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

首先,我们获取每个站点的最长日期。然后在那一天,获得最长时间。

希望这有帮助。