2013-02-28 5 views
0

Как обеспечить, когда я GROUP BY QID, возвращается только последняя строка?Как указать порядок GROUP BY?

ID, QID, VALUE, TIMESTAMP 
45,1,Male,1362044759 
58,1,Female,1362045122 
59,1,Male,1362045149 
60,1,Female,1362045153 
82,1,Female,1362045863 
83,1,Female,1362045887 
92,1,Male,1362046012 
101,1,Female, 1362046401 

SELECT ID, QID, VALUE, TIMESTAMP FROM table GROUP BY ID 

... возвращает первая строка. Я не могу просто сделать LIMIT 1, так как это всего лишь пример, в таблице есть много QID, которые все сгруппированы.

Спасибо.

+0

Когда вы используете GROUP BY, нет понятия «самая последняя строка» - ** все ** строки сгруппированы вместе. –

+0

Да, но SQL возвращает значение, как я могу указать, какое это значение? Это не может быть просто случайным. – ojsglobal

+0

выберите * from table group by id order by ID limit 1 –

ответ

1

Я предполагаю, что вам нужен «последний» ряд для каждого QID. Вы обычно используете полученный стол подзапрос, чтобы получить последнюю TIMESTAMP значение каждого QID «s, а затем присоединиться на что:

SELECT ... 
FROM myTable AS t 
INNER JOIN (SELECT QID, MAX(`TIMESTAMP`) AS MaxT FROM myTable GROUP BY QID) l 
    ON t.QID = l.QID AND l.maxT = t.`TIMESTAMP` 

Это также предполагается, что ваш TIMESTAMP увеличивается колонки, как время идет.

+0

Кажется, это просто возвращает метку времени MAX, а не последнее значение. – ojsglobal

0

Вы можете использовать GROUP_CONCAT для извлечения сгруппированных данных.

SELECT GROUP_CONCAT(ID ORDER BY TIMESTAMP DESC) AS latest_id 
0

Если вы хотите самый последний рекорд вернулся:

SELECT * 
FROM TBL 
ORDER BY `TIMESTAMP` DESC 
LIMIT 1; 

В противном случае, если вы хотите, чтобы получить самую последнюю запись для каждой группы QID проверить эту Stack Overflow Post, что лечить вашу же проблему с оптимальными решениями ,

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