2010-02-25 30 views
5

Tôi đang cố gắng làm những gì có vẻ như nó phải là một hoạt động SQL đơn giản, nhưng tôi chỉ không tìm đúng cú pháp để làm điều đó một cách nhanh chóng. Tôi đang sử dụng SQLite.SQL: Nhanh chóng nhận được giá trị của cột B bất cứ nơi nào cột A là tối thiểu

Vấn đề cơ bản là tôi có một bảng có khóa chính là (objUid, time). Nó chứa các cột objUid, thời gian và khung. Với mục đích của câu hỏi này, khung là một giá trị mờ đục.

Tôi muốn trích xuất cho mỗi objUid: objUid, minTime, giá trị của khung tại minTime, maxTime, giá trị của khung tại maxTime.

... và tôi muốn làm điều đó càng nhanh càng tốt.

Tôi có quyền này ngay bây giờ, hoạt động, nhưng nếu tôi đưa ra câu lệnh "NATURAL JOIN" (nghĩa là tôi không nhận được cột "khung"), mọi thứ nhanh gấp đôi.

SELECT * FROM (
    SELECT * FROM (
     SELECT objUid, min(time) as minTime, max(time) as maxTime FROM motion GROUP BY objUid 
    ) NATURAL JOIN (
     SELECT objUid, time as minTime, frame as minFrame FROM motion 
    ) 
) NATURAL JOIN (SELECT objUid, time as maxTime, frame as maxFrame FROM motion) 

Bất kỳ ý tưởng nào?

Cảm ơn!

Trả lời

2

Sử dụng:

SELECT x.objuid, 
     y.time, 
     y.frame, 
     z.time, 
     z.frame 
    FROM (SELECT m.objuid, 
       MIN(m.time) AS min_time, 
       MAX(m.time) AS max_time 
      FROM MOTION m 
     GROUP BY m.objuid) x 
    JOIN MOTION y ON y.objuid = x.objuid 
       AND y.time = x.min_time 
    JOIN MOTION z ON z.objuid = x.objuid 
       AND z.time = x.max_time 
+0

cú pháp của bạn chắc chắn là vượt trội so với mỏ (ít làm tổ điên), và có vẻ như để tạo ra kết quả tương tự. ... nhưng không nhanh hơn khi tôi thử nghiệm nó. Bất kỳ thủ thuật ma thuật nào khác lên tay áo của bạn? – dianders

+0

@dianders: Tôi có thể thấy một cái gì đó liên quan đến LIMIT, nhưng nghi ngờ nó sẽ có thể mở rộng đến nhiều hơn một objuid. –

+0

Không bao giờ có bất kỳ câu trả lời nào khác, và của bạn là hữu ích (và cho tôi thấy rằng không có một cái gì đó thực sự rõ ràng rằng tôi đã mất tích). Đánh dấu của bạn là "chính xác". Cảm ơn! – dianders

Các vấn đề liên quan