Используя следующий запрос и результаты, я ищу самую последнюю запись, где свойства ChargeId и ChargeType уникальны.
select chargeId, chargeType, serviceMonth from invoice
CHARGEID CHARGETYPE SERVICEMONTH
1 101 R 8/1/2008
2 161 N 2/1/2008
3 101 R 2/1/2008
4 101 R 3/1/2008
5 101 R 4/1/2008
6 101 R 5/1/2008
7 101 R 6/1/2008
8 101 R 7/1/2008
Желаемая:
CHARGEID CHARGETYPE SERVICEMONTH
1 101 R 8/1/2008
2 161 N 2/1/2008
Вы можете использовать GROUP BY для группировки элементов по типу и идентификатору. Затем вы можете использовать функцию MAX() Агрегат, чтобы получить последний месяц службы. Ниже приведен результат с параметрами ChargeId, ChargeType и MostRecentServiceMonth
SELECT
CHARGEID,
CHARGETYPE,
MAX(SERVICEMONTH) AS "MostRecentServiceMonth"
FROM INVOICE
GROUP BY CHARGEID, CHARGETYPE
Так что это не то, о чем запрашивал запросчик, но это ответ на "SQL-выбор строк по последней дате".
Изменено из http://wiki.lessthandot.com/index.php/Returning_The_Maximum_Value_For_A_Row
SELECT t.chargeId, t.chargeType, t.serviceMonth FROM(
SELECT chargeId,MAX(serviceMonth) AS serviceMonth
FROM invoice
GROUP BY chargeId) x
JOIN invoice t ON x.chargeId =t.chargeId
AND x.serviceMonth = t.serviceMonth
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth
FROM invoice
GROUP BY chargeId, chargeType
Я вижу, что большинство разработчиков используют встроенный запрос, не глядя на его влияние на огромные данные.
в простой форме вы можете достичь этого:
select a.chargeId, a.chargeType, a.serviceMonth
from invoice a
left outer join invoice b
on a.chargeId=b.chargeId and a.serviceMonth <b.serviceMonth
where b.chargeId is null
order by a.serviceMonth desc
select to.chargeid,t0.po,i.chargetype from invoice i
inner join
(select chargeid,max(servicemonth)po from invoice
group by chargeid)t0
on i.chargeid=t0.chargeid
Вышеприведенный запрос будет работать, если отдельный идентификатор заряда имеет разные комбинации зарядного типа. Надеемся, что этот простой запрос поможет с небольшим временем исполнения...