只是为了拉相应的记录为单个用户,其中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