Subquery

Sqlite - 在表上查詢?

  • August 14, 2016

我在這個表中有很多這樣的記錄(超過 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
)

引用自:https://dba.stackexchange.com/questions/146731