2013-07-26 9 views
6

geçerli:MYSQL Seç MAX tarihi</p> <p>Ne var ben rekor sayıda tarihi yerleri dönmek çalışıyorum

SELECT l.location, t.transaction_id, t.date_modified 
FROM transactions as t 
INNER JOIN (
SELECT 
t1.received_id, t1.transaction_id, t1.date_modified 
FROM (
SELECT received_id, MAX(date_modified) as maxmodify 
FROM transactions 
GROUP BY received_id) as max_record 
JOIN transactions as t1 
ON (t1.received_id =max_record.received_id) 
) as whatever 
INNER JOIN locations as l 
ON l.location_id = t.location_id 
INNER JOIN received as r 
ON r.received_id = t.received_id 
WHERE t.received_id='1782' 
ORDER BY t.date_modified DESC 

Bu gibi verileri ayrıştırmak ve iadeler yaklaşık 1 dakika sürer:

:

T-E1A 67294 2013-05-29 14:05:30 
T-E1A 67293 2013-05-29 14:05:30 
T-E1A 67294 2013-05-29 14:05:30 
T-E1A 67293 2013-05-29 14:05:30 
T-E1A 67294 2013-05-29 14:05:30 
T-E1A 67293 2013-05-29 14:05:30 
T-E1A 67294 2013-05-29 14:05:30 

Ya gerçekten görmeyi bekliyorum böyle bir sorgudan gibi verilerdir Bu ikinci sorgu iyidir ama gerçekten sadece her kayıt kimliği ve konum için son değişiklik zamanı göstermek istiyorum

T-E1A 67290 2013-05-29 13:58:26 
T-E1A 67289 2013-05-29 13:58:26 
ADJUST 67283 2013-04-26 11:33:54 
ADJUST 67284 2013-04-26 11:33:54 
ST10 67279 2013-04-26 09:52:41 
ST10 67278 2013-04-26 09:52:13 
ST10 67277 2013-04-26 09:50:58 
ST10 67276 2013-04-26 09:50:20 
SH3  67274 2013-04-26 09:49:39 

döndürür

.

Neyi yanlış yaptığımı gören var mı? Yardımı takdir ediyorum.

cevap

10

Böyle bir şey ... Bu olduğu

SELECT t1.received_id 
    , t1.transaction_id 
    , t1.date_modified 
    , l.location 
    FROM transactions t1 
    JOIN (SELECT received_id, MAX(date_modified) maxmodify FROM transactions GROUP BY received_id) max_record 
    ON max_record.received_id = t1.received_id 
    AND max_record.maxmodify = t1.date_modified 
    JOIN locations l 
    ON l.location_id = t1.location_id 
    JOIN received r 
    ON r.received_id = t1.received_id 
WHERE t1.received_id = '1782' 
ORDER 
    BY t1.date_modified DESC 

çekirdeği ...

SELECT x.* 
    FROM my_table x 
    JOIN (SELECT id,MAX(thing) max_thing FROM my_table GROUP BY id) y 
    ON y.id = x.id 
    AND y.max_thing = x.thing; 
+0

Teşekkür ederim bu en uygun olduğunu düşündüğüm yoldur ama ilk sorgulamada gördüğünüz gibi diğer tabloları (konumlar, alınanlar) almaya çalıştığınız gibi sorunlar yaşıyorum. – nodsdorf

+0

Evet, her JOIN yan tümcesi ile bir AÇIK yan tümce gerekiyor – Strawberry

0
SELECT l.location, t.transaction_id, max(t.date_modified) FROM transactions as t 
JOIN locations as l 
ON l.location_id = t.location_id 
JOIN received as r 
ON r.received_id = t.received_id 
WHERE t.received_id='1782' 
group by l.location, t.transaction_id 
ORDER BY t.date_modified DESC 

Bu yardımcı olur mu?

+0

Başlangıçta tarafından grubunu çalıştı ama konu ben max değiştirilme tarihini kapmak gerekir ve Grup buna izin vermiyor. Teşekkür ederim – nodsdorf