只是为单个用户提取适当的记录,其中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
andpartition 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
请注意,我更喜欢使用>=
or<=
和类似的语句,而不是between
,这仅仅是因为有时您希望对返回的内容进行比between
(包括、排他等)更多的控制。where
另请注意,如果子句中的条件没有为该特定用户返回任何内容,您显然不会得到任何结果。