Subquery
Sqlite - 在表上查詢?
我在這個表中有很多這樣的記錄(超過 6000 條)
Lat
並且Lng
是相同的,我應該選擇這些欄位(lat,lng)
:我需要獲取
Lat Lng
(相同)和最新(相同日期之間)的第一條記錄,以便使用過濾日期計算時間欄位,並從lat lng
下一條記錄中獲取最新記錄。我怎麼寫這個查詢?
我寫了這個查詢,我現在需要獲取第一個和最後一個記錄基準日期!
SELECT mDate as date ,xLat as lat,yLng as lng FROM ReportAct_tbl , (SELECT mDate as dt,xLat as lt,yLng as lg FROM ReportAct_tbl ) WHERE date = dt and lat = lt and lng = lg order by date ASC,lat ASC,ylng ASC
據我了解,sqlite 沒有真正簡化此類查詢的視窗函式(我替換了幾個我懷疑是保留字的標識符):
select dt, tm, lat, lng from ( select dt, tm, lat, lng , row_number() over (partition by dt, lat, lng order by tm asc) rn1 , row_number() over (partition by dt, lat, lng order by tm desc) rn2 from ReportAct_tbl ) x where 1 in (x.rn1, x.rn2)
如果沒有視窗函式(如 row_number),可能很容易獲得不存在該時間之前的任何行的行
select dt, tm, lat, lng from ReportAct_tbl r1 where not exists ( select 1 from ReportAct_tbl r2 where r1.dt = r2.dt and r1.lat = r2.lat and r1.lng = r2.lng and r1.tm < r2.tm )
為了得到最後一行,我們做同樣的事情:
select dt, tm, lat, lng from ReportAct_tbl r1 where not exists ( select 1 from ReportAct_tbl r2 where r1.dt = r2.dt and r1.lat = r2.lat and r1.lng = r2.lng and r1.tm > r2.tm )
最後我們可以將它們組合為:
select dt, tm, lat, lng from ReportAct_tbl r1 where not exists ( select 1 from ReportAct_tbl r2 where r1.dt = r2.dt and r1.lat = r2.lat and r1.lng = r2.lng and r1.tm < r2.tm ) union select dt, tm, lat, lng from ReportAct_tbl r1 where not exists ( select 1 from ReportAct_tbl r2 where r1.dt = r2.dt and r1.lat = r2.lat and r1.lng = r2.lng and r1.tm > r2.tm )