그냥 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
이지만, 사용하는 기발한 비트)를 사용하는 중 필요한 것 :
을 가끔 당신이
between
(포함, 전용 등)보다 반환 무엇을 통해 좀 더 컨트롤을 원하는 간단하기 때문에,
>=
또는
<=
및 이와 유사한 문장보다는
between
를 사용하는 것을 선호
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
참고. where
절의 기준이 해당 사용자에 대해 아무것도 반환하지 않으면 분명히 결과가 나타나지 않습니다.
@Andomar - 나는 OP가 무엇을 요구하고 있는지 100 % 확신하지 못했습니다. 각 사용자에 대해 언급 된대로 생성 된 내용을 기반으로 최신 체크인을 반환하십시오.그러나 그렇습니다. 만약 OP가 가장 최근의 기록을 원할 경우, 위의 기준은 정확한 것입니다. OP가 그것을 필요로하지 않는 경우 나는 삭제할 것이다 :) – sgeddes
당신 말이 맞아, 당신이 그런 식으로 질문을 읽을 수있는 것처럼 보인다. +1 : – Andomar
이 쿼리는 작동하지만 내 경우에는 다른 문제가 있습니다. 내가 만든 DESC에 의해 명령 된 가장 최근의 CHECKIN에 대해서만 쿼리를 실행해야합니다. 나는 테이블 체크 인에서 각 사용자에 대해 단일 최신 체크 인을 추출한 다음 geolocalization 절을 적용해야한다고 생각한다. 내가 어떻게 할 수 있니? – CeccoCQ