2010-04-29 5 views
0

Я бегу этот запросMySQL запрос последняя дата

SELECT sh.*, 
     u.initials AS initals 
    FROM database1.table1 AS sh 
    JOIN database2.user AS u ON u.userID = sh.userid 
WHERE id = 123456 
    AND dts = (SELECT MAX(dts) from database1.table1) 
ORDER BY sort_by, category 

В table1 У меня есть записи, как этот

dts       status     category   sort_by 
2010-04-29 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:27  Civil Engineers   Occupation 1 
2010-04-28 12:20:54 Married    Marital Status 2  2010-04-28 12:21:15 Smoker    Tobbaco 3 
2010-04-27 12:20:27  Civil Engineers   Occupation 1 
2010-04-27 12:20:54 Married    Marital Status 2  2010-04-27 12:21:15 Smoker    Tobbaco 3 
2010-04-26 12:20:27  Civil Engineers   Occupation 1 
2010-04-26 12:20:54 Married    Marital Status 2  2010-04-26 12:21:15 Smoker    Tobbaco 3 

Если вы посмотрите на мои данные, я выбираю последнюю запись по категориям и sort_id. однако в некоторых случаях, например 29-го (2010-04-29 12:20:27), у меня есть только одна запись. Поэтому в этом случае я хочу показать занятие для последних, а затем остальных (последнее). Но в настоящее время он отображает только одну строку.

+0

Вы должны действительно форматировать код и поместить таблицу в поле кода. –

+0

Я не могу обработать структуру столбцов таблицы. –

+0

Это: 'AND dts = (SELECT MAX (dts) from database1.table1)' ... гарантирует, что вы получите только записи, соответствующие этому значению dts. Вам нужна группа по критериям для надлежащего разбиения значений dts. –

ответ

1

пытается как лучше гадать, что у вас есть, ваш запрос должен был бы быть отрегулирован так или иначе, что-то вроде

SELECT 
     sh.dts, 
     cast(if(preAgg1.totalPerCatSort = 1, sh.status, ' ') as char(20)) 
      as SingleStatus, 
     sh.category, 
     sh.sort_by, 
     u.initials AS initals 
    FROM 
     database1.table1 AS sh, 
     database2.user AS u, 
     (select 
       t1.category, 
       t1.sort_by, 
       max(dts) maxdts, 
       count(*) totalPerCatSort 
      from 
       database1 t1 
      group by 
       t1.category, 
       t1.sort_by) preAgg1 
    WHERE 
     sh.userid = u.userID 
    and sh.sort_by = preAgg1.sort_by 
    and sh.category = preAgg1.category 
    and sh.dts = preAgg1.maxdts 
    and id = 123456 ?? Should this actually be the UserID column ?? 
    ORDER BY 
    sort_by, 
    category 

вы, возможно, придется применить «ID = 123456» в суб- «preAgg1» выберите, но еще раз, не уверен, какой идентификатор для этого столбца/таблицы был применим, иначе вы могли бы иметь другие записи даты другими «пользователями», а не одно и то же для одного кандидата, которого вы ищете ... Ваш звонок.

За заботу о получении всех записей, я бы просто удалить «и ID = 123456» классификатор и все должно быть хорошо

+0

Мой запрос должен выбрать все строки для тестирования. Как я могу сделать это, чтобы выбрать все строки, чтобы я мог протестировать? благодаря – Autolycus

Смежные вопросы