只是爲了拉相應的記錄爲單個用戶,其中user_id
爲12345
:
SELECT TOP 1 CheckinTable.*
FROM CheckinTable
WHERE CheckinTable.user_id = 12345
AND CheckinTable.latitude >= 44.00
AND CheckinTable.latitude <= 41.00
AND CheckinTable.longitude >= 9.18
AND CheckinTable.longitude <= 9.44
ORDER BY CheckinTable.modified DESC
如果你想拉它爲多個用戶,你需要或者使用子查詢或over
和partition by
語句(partition by
比分組更有效,但有點古怪的使用):
SELECT p.id ,
p.created ,
p.latitude ,
p.longitude ,
p.user_id
FROM (
SELECT CheckinTable.id ,
CheckinTable.created ,
CheckinTable.latitude ,
CheckinTable.longitude ,
CheckinTable.user_id ,
ROW_NUMBER() OVER (PARTITION BY
CheckinTable.user_id) AS the_row_number
FROM CheckinTable
WHERE CheckinTable.latitude >= 44.00
AND CheckinTable.latitude <= 41.00
AND CheckinTable.longitude >= 9.18
AND CheckinTable.longitude <= 9.44
ORDER BY CheckinTable.modified DESC) p
WHERE the_row_number = 1
注意,我更喜歡使用>=
或<=
和類似表述,而不是between
,只是因爲有時你想在什麼比between
(含,獨家等)返回更多的控制。還要注意,如果where
子句中的條件不會爲該特定用戶返回任何內容,那麼您顯然不會得到任何結果。
@Andomar - 我不是100%確定OP要求什麼。針對每位用戶提及,根據創建的情況返回最新的簽入。但是,是的,如果OP只是想要最新的記錄與標準,上面的答案是正確的。我會刪除,如果OP不需要它:) – sgeddes
你是對的,看起來像你可以閱讀這樣的問題。 +1 :) – Andomar
此查詢可以工作,但在我的情況下還有另一個問題。我只需要在用戶的最新CHECKIN上執行查詢,然後通過創建的DESC進行排序。我認爲我需要爲每個用戶提取單個最新簽入(在表格簽入中),然後應用地理定位子句。我如何做到這一點? – CeccoCQ