2013-07-26 8 views
6

Tôi đang cố gắng để trở lại các địa điểm di tích lịch sử một con số kỷ lục củaMYSQL Chọn MAX ngày bên trong một tuyên bố tham gia

Những gì tôi có là:

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 

này mất khoảng 1 phút để phân tích và trả về dữ liệu như:

:

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 

Những gì tôi đang thực sự mong đợi để xem dữ liệu như từ một truy vấn như thế này là

nào trả

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 

truy vấn thứ hai này là tốt hơn nhưng tôi thực sự muốn chỉ hiển thị thời gian sửa đổi lần cuối cho mỗi id kỷ lục và vị trí.

Ai có thể xem tôi đang làm gì sai không? Tôi đánh giá cao sự giúp đỡ.

Trả lời

10

Something như thế này ...

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 

hạt nhân trong số đó là này ...

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

Cảm ơn bạn đây là con đường tôi nghĩ là thích hợp nhất nhưng tôi gặp vấn đề như bạn có thể thấy trong truy vấn đầu tiên của tôi cố gắng để có được các bảng khác (địa điểm, nhận được) tham gia là tốt. – nodsdorf

+0

Có bạn cần mệnh đề ON với mọi mệnh đề JOIN – 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 

Điều này có hữu ích không?

+0

ban đầu tôi cố gắng nhóm bằng nhưng vấn đề là tôi cần phải lấy ngày max sửa đổi và nhóm không cho phép điều đó. Cảm ơn bạn mặc dù – nodsdorf