2008-10-09 40 views
85

Sử dụng truy vấn và kết quả sau đây, tôi đang tìm mục nhập mới nhất trong đó ChargeId và ChargeType là duy nhất.Chọn các hàng SQL theo ngày gần đây nhất

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 

mong muốn:

CHARGEID CHARGETYPE SERVICEMONTH 
1 101  R  8/1/2008 
2 161  N  2/1/2008 

Trả lời

121

Bạn có thể sử dụng một GROUP THEO đến các mục nhóm theo loại và id. Sau đó, bạn có thể sử dụng hàm MAX() tổng hợp để nhận tháng dịch vụ gần đây nhất. Dưới đây trả về một kết quả thiết lập với ChargeId, ChargeType, và MostRecentServiceMonth

SELECT 
    CHARGEID, 
    CHARGETYPE, 
    MAX(SERVICEMONTH) AS "MostRecentServiceMonth" 
FROM INVOICE 
GROUP BY CHARGEID, CHARGETYPE 
+4

Đó là hoàn hảo. Cảm ơn bạn! – jgreep

+1

Đừng quên bí danh trường MAX (serviceMonth) trong trường hợp bạn cần nó ở hạ lưu. –

+2

ok, vậy điều gì sẽ xảy ra nếu có một hàng 101 N 1/1/2008 trong bảng? – tvanfosson

6
SELECT chargeId, chargeType, MAX(serviceMonth) AS serviceMonth 
FROM invoice 
GROUP BY chargeId, chargeType 
41

Vì vậy, đây không phải là những gì người yêu cầu được yêu cầu nhưng nó là câu trả lời cho "hàng SQL chọn bởi hầu hết các ngày gần đây".

Modified từ 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 
+0

Cảm ơn bạn! Đây là những gì tôi đang tìm kiếm! – Diana

+0

Dường như không tương thích với chế độ xem. – Nuzzolilo

-1
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 

Các truy vấn trên sẽ hoạt động nếu phí id biệt có combinations.Hope chargetype khác nhau truy vấn đơn giản này giúp với ít thời gian thực hiện xem xét ...

2

Tôi thấy hầu hết các nhà phát triển sử dụng truy vấn nội tuyến mà không nhìn ra nó tác động đến dữ liệu khổng lồ.

trong đơn giản, bạn có thể đạt được điều này bằng cách:

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 
Các vấn đề liên quan