2017-01-30 4 views
0

Я делаю запрос, в котором я хочу идентификаторы заданий, которые будут сгруппированы, но я хочу последнюю метку времени строки в результате которого не происходитПолучить последнее значение поля с помощью группы по

Вот это SQL скрипка

http://sqlfiddle.com/#!9/de8769 

нормальный вид для таблицы

enter image description here

выходной сигнал после того, как с помощью этого запроса я сделал

SELECT 
DISTINCT(user_id), 
job_id, 
message, 
receiver_id, 
parent, 
type, 
id as id FROM ai_ms_messages 
WHERE (receiver_id = '7' OR user_id = '7') AND type<>0 AND type<>2 group by job_id 
ORDER BY max(timestamp) DESC 

enter image description here

Но как вы можете видеть его принимать значение идентификатора как 3 для JOB_ID 11, но оно должно быть принято значение 5 (как это последнее для JOB_ID 11), а также порядок неправильно , Поскольку job_id 11 является последним, а не job_id 12. Есть ли способ достичь этого?

ответ

0

Запрос будет:

select 
distinct(m1.user_id), 
m1.job_id, 
m1.message, 
m1.receiver_id, 
m1.parent, 
m1.type, 
m1.id as id from ai_ms_messages as m1 
where m1.type<>0 and m1.type<>2 
and m1.timestampt = (select max(m2.timestamp) from ai_ms_messages as m2 where m2.job_id = m1.job_id) 
+0

Благодарим вас за ответ. На самом деле мне нужен идентификатор получателя, поэтому я могу сделать условие, например, идентификатор пользователя или идентификатор получателя, чтобы я мог проверить, получил ли человек сообщение или послал сообщение относительно этой работы. Но даже после удаления этого идентификатора получателя я не получаю последний идентификатор –

+0

, я добавил его в запрос выше –

+0

Отредактировано. Пожалуйста, смотрите. Кроме того, мои SQL Fiddle breaks;) –

0

По вашему запросу вы ищете данные для receiver_id = '7' и для id =5 , receiver_id = '6', так что это не в вашем выводе запроса.

Просто удалите условия или проверьте данные только в соответствии с условиями.

Группы GROUP BY по первому совпадающему результату.

Итак, предпочтительнее этот метод в качестве подзапроса.

SELECT * 
FROM (

SELECT DISTINCT (
user_id 
), job_id, message, receiver_id, parent, 
TYPE , id AS id 
FROM ai_ms_messages 
WHERE (
receiver_id = '7' 
OR user_id = '7' 
) 
AND TYPE <>0 
AND TYPE <>2 
ORDER BY TIMESTAMP DESC 
) AS sub 
GROUP BY job_id 
+0

Здравствуйте, Спасибо за ваш ответ, но он все равно не покажет последний идентификатор, который должен быть 5, даже если я удалю идентификатор получателя –

+0

@ParamVeer: Пожалуйста, проверьте мой запрос. –

+0

Это создает проблемы, когда я пытаюсь добавить новую запись для любого другого типа и типа задания. –

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

  • Нет связанных вопросов^_^