2011-07-13 51 views
18

Tôi đang lấy dữ liệu từ cơ sở dữ liệu và một trong các bảng chứa hai cột cùng nhau xác định vị trí và cột khác có chứa ngày của mỗi lần được phục vụ. Có thể viết một truy vấn SQL sao cho tôi nhận được thời gian gần đây nhất mà mỗi vị trí đã được phục vụ?SQL: Chọn ngày gần đây nhất cho mỗi danh mục

Vì vậy, nếu dữ liệu thô của tôi trông như thế này:

category_a category_b date 
     1   a  1/1/01 
     1   a  2/2/02 
     1   b  1/2/01 
     1   b  2/3/02 
     2   a  1/3/01 
     2   a  2/4/02 
     2   b  1/4/01 
     2   b  2/5/02 

thì truy vấn sẽ trở lại này:

category_a category_b date 
     1   a  2/2/02 
     1   b  2/3/02 
     2   a  2/4/02 
     2   b  2/5/02 

Đây sẽ là dễ dàng để làm gì nếu cơ sở dữ liệu đã được tác giả theo cách như vậy mà các tổ hợp danh mục được lưu trữ trong một bảng riêng biệt. Tuy nhiên, tôi không kiểm soát cơ sở dữ liệu này, vì vậy tôi không thể thay đổi nó.

+0

Tại sao lại có một (-1) về vấn đề này? – jp2code

+3

Tôi đã tự hỏi như vậy. Tôi không phải là chuyên gia về SQL, nhưng tôi nghĩ tôi đã giải thích tốt câu hỏi của mình ... – Wilduck

+0

Có thể bạn làm khó chịu ai đó trên một chủ đề khác và họ trả đũa bằng cách đưa bạn đến đây. Tôi đã từng xảy ra điều đó trước đó. – jp2code

Trả lời

8
SELECT 
    category_a, 
    category_b, 
    MAX(date) 
FROM 
    Some_Unnamed_Table 
GROUP BY 
    category_a, 
    category_b 
ORDER BY 
    category_a, 
    category_b 

Tôi chắc chắn không quan tâm giúp đỡ mọi người khi tôi có thể hoặc tôi sẽ không ở trên trang web này, nhưng bạn có thực sự tìm kiếm câu trả lời cho điều này trước khi đăng không?

+3

Tôi đã làm. Thật không may, tôi đã không có những từ để giải thích điều này trong một thời trang google-thể. Trong thực tế, tôi đã đọc về các báo cáo CASE trong 15 phút trước khi tôi nói "Vặn nó, ai đó trên SO biết cách trả lời câu hỏi này." Tôi thực sự đánh giá cao sự giúp đỡ. – Wilduck

+0

Đã hiểu. Vui vì tôi có thể giúp. –

2

Đây là một "nhóm bằng cách" đơn giản bằng cách sử dụng thực tế, các "nhất gần đây" ngày là "cao nhất có giá trị", hoặc max(), ngày

select category_a, category_b, max(date) 
from mytable 
group by category_a, category_b 
order by category_a, category_b -- The ORDER BY is optional, but the example data suggests it's needed 
1

chọn category_a, category_b, tối đa (ngày) từ nhóm tbl bởi category_a, category_b;

1

Hãy thử

select category_a, category_b, max(date) as last_update from table group by category_a, category_b 
Các vấn đề liên quan