कई अन्य DBMS (Oracle, SQL-Server, Postgres) में आप विंडो फ़ंक्शंस का उपयोग कर सकते हैं:
SELECT id, file, folder, added
FROM
( SELECT id, file, folder, added,
DENSE_RANK() OVER (ORDER BY added DESC) AS d_rank,
ROW_NUMBER() OVER (PARTITION BY added ORDER BY id DESC) AS row_no
FROM AviationImages
) d
WHERE d_rank <= 5 -- limit number of dates
AND row_no <= 5 ; -- limit number of images per date
MySQL में आपके पास विंडो फ़ंक्शन और OVER
. की विलासिता नहीं है खंड:
SELECT i.id, i.file, i.folder, i.added
FROM
( SELECT DISTINCT added
FROM AviationImages
ORDER BY added DESC
LIMIT 5
) AS da
JOIN
AviationImages AS i
ON i.added = da.added
AND i.id >= COALESCE(
( SELECT ti.id
FROM AviationImages AS ti
WHERE ti.added = da.added
ORDER BY ti.id DESC
LIMIT 1 OFFSET 4
), -2147483647) ; -- use 0 if the `id` is unsigned int
(added, id)
. पर एक अनुक्रमणिका दक्षता में मदद करेगा - और यदि तालिका InnoDB और id
. का उपयोग करती है प्राथमिक कुंजी है, फिर (added)
. पर केवल एक अनुक्रमणिका है पर्याप्त होगा।