2015-12-01 2 views
2

я пытался выбрать несколько строк с устройством ид макс даты, но я только один рядЯ хочу, чтобы выбрать несколько колонок по идентификатору устройства с максимальной даты в SQL Server

SELECT 
    * 
FROM 
    trackinfo AS [data] 
WHERE 
    Time = (SELECT MAX(Time) FROM trackinfo WHERE DeviceId = 11) 

Может кто-то пожалуйста, помогите мне с этим?

Я также попытался использовать

SELECT 
    * 
FROM 
    trackinfo AS [data] 
WHERE 
    Time = (SELECT MAX(Time) FROM trackinfo WHERE DeviceId in (11,12)) 

, но до сих пор нет помощи. пожалуйста, найти ниже изображения фиктивных данных я хочу, чтобы выбрать два ряда с DeviceId 11 и 12

enter image description here

+0

Каков тип данных 'Time'? Это 'DATETIME'? –

+0

ваш тег конфликтует ... каковы ваши dbms? SQL Server или MySQL? – Japongskie

+0

извините sql server – nirmal

ответ

3

ROW_NUMBER Использование:

SELECT * 
FROM (
    SELECT *, 
     RN = ROW_NUMBER() OVER(PARTITION BY DeviceId ORDER BY [Time] DESC) 
    FROM trackinfo 
    WHERE DeviceId IN(11, 12) 
) t 
WHERE RN = 1 
+0

нет это не работает – nirmal

+1

Что вы подразумеваете под неработающим? Пожалуйста, включите некоторые примеры данных и ожидаемый результат? –

+0

добавили образ дискретных данных, я хочу, чтобы две строки были возвращены 1 с deviceid 11 и один с идентификатором устройства 12 – nirmal

0

Нет необходимости включать DeviceId в своем запросе к югу .. попробовать это ...

SELECT * 
FROM trackinfo AS [data] 
WHERE DeviceId IN (11, 12) AND Time = (SELECT MAX(Time) FROM trackinfo) 
+0

Нет, я хочу два ряда с deviceid 11 и 12, для одного он отлично работает – nirmal

+0

Я вижу, использование 'IN' .. меня модифицировало мой ответ .. см., Если это помогает – Japongskie

+0

Я попытался все еще возвращать одну строку, я думаю, что максимальное время также сравнивает время между ними, дело в том, что оба имеют одинаковое время до mili second – nirmal

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