1
我有以下查詢:sqlite的查詢來獲取最早日期
SELECT (CASE WHEN cc.id IS NULL THEN dc.id ELSE cc.id END) AS id,
l.CALL,l.QSO_DATE,cc.prefix,l.state,l.QSL_RCVD,l.Band,l.Mode,
(CASE WHEN CC.Country IS NULL THEN dc.Country ELSE cc.Country END) AS country,
(CASE WHEN CC.Country IS NULL THEN 'Y' ELSE 'N' END) AS 'deleted',
(CASE WHEN CC.flags IS NULL THEN dc.flags ELSE cc.flags END) AS 'flag'
FROM lotw l
LEFT OUTER JOIN CountryCode AS cc on cc.code = l.dxcc
LEFT OUTER JOIN DeleteCountry AS dc on dc.code = l.dxcc
WHERE l.DXCC > ''
GROUP BY CC.Country,dc.Country ORDER BY cc.COUNTRY,dc.COUNTRY.
返回一組唯一的國家的COUNTRYCODE表的代碼字段相匹配。 速度不到一秒鐘。
我需要展開這個查詢select從LOTW表中選擇最早的QSLRDATE。 所以我修改本查詢:
SELECT (CASE WHEN cc.id IS NULL THEN dc.id ELSE cc.id END) AS id, l.CALL,l.QSO_DATE,cc.prefix,l.state,l.QSL_RCVD,l.Band,l.Mode,
(CASE WHEN CC.Country IS NULL THEN dc.Country ELSE cc.Country END) AS country,
(CASE WHEN CC.Country IS NULL THEN 'Y' ELSE 'N' END) AS 'deleted',
(CASE WHEN CC.flags IS NULL THEN dc.flags ELSE cc.flags END) AS 'flag'
FROM lotw l
LEFT OUTER JOIN CountryCode AS cc on cc.code = l.dxcc
LEFT OUTER JOIN DeleteCountry AS dc on dc.code = l.dxcc
WHERE l.QSLRDATE = (SELECT MIN(l2.QSLRDATE) FROM LOTW l2 WHERE l2.DXCC=l.DXCC) AND l.DXCC > ''
GROUP BY CC.Country,dc.Country ORDER BY cc.COUNTRY,dc.COUNTRY
這個工作,但是性能從不到一秒到15秒去。 子查詢我說:
l.QSLRDATE = (SELECT MIN(l2.QSLRDATE) FROM LOTW l2 WHERE l2.DXCC=l.DXCC)
不能完成我想要的東西的最佳方式。 任何幫助將是偉大的。
非常酷的索引和你的代碼實際上比以前更快非常感謝,我從來沒有想過加入 – Mike