2015-05-14 2 views
0

У меня есть ментальный блок с этим запросом, я пытаюсь вернуть максимальную дату и максимальное время и выполнить заказ по идентификатору. Было бы весьма признателен, если кто-то может добавить пару глаз к этому типу запроса Итак:MySQL Subquery/Query Issue

Набор данных

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 
+1

Я не знаю, почему ожидалось «10, 5/10/15, 3, google.com» вместо «10, 5/10/15, 10, google.com»? – Darian

+1

Справа. Почему вы ожидаете 3 не 10 на время?. – BICube

+0

Вы правы, 3 должны быть 10. Обновление –

ответ

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 

Это один должен дать вам идентификаторы пользователей, страницы он посетил, в последний раз он посетил эту страницу, и наибольшее количество времени, которое он провел в любой визит в этот последний визит.

+0

Это выглядит хорошо до сих пор, одна проблема, с которой я столкнулся, на самом деле состоит в том, что идентификация имеет два домена .. она выбрасывает все данные для цикла. В примере, если идентификатор 10 отправился на yahoo.com и google.com, maxtime больше не действует. –

+0

Что, черт возьми, означает ваше поле идентичности, если оно может перейти на два веб-сайта? также, почему ваше значение времени зависит от вашей даты? то, как это означает, есть проблема с моим запросом. Если бы это было просто одно поле datetime, это было бы так же просто, как в настоящее время отвечает ответ –

+0

Идентификатор будет уникальным идентификатором пользователя. Поскольку один пользователь мог просматривать многие веб-сайты. Таким образом, результат должен будет показать результат для yahoo.com и google.com для идентификации 10. –

1

Не допускайте, чтобы все записи для идентификации были в тот же день, например. если сущность имеет время 1/1/15 5 вечера и 1/2/15 2 вечера, вы получите 1/2/15 5 вечера, что неправильно.

я всегда сливаться время и дату, но если вы не можете попробовать это:

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 

Во-первых, мы получаем максимальную дату для каждого сайта. Затем на этот день получите максимальное время.

Надеюсь, это поможет.

+0

Спасибо за ваш ответ, я также рассмотрю ваше решение. –