문제

간단히 말해서, 나는 무엇보다도 타임 스탬프를위한 열이있는 테이블이 있습니다. 가장 최근 (예 : 가장 큰 가치) 타임 스탬프로 행을 얻고 싶습니다. 현재 나는 이것을하고있다 :

SELECT * FROM table ORDER BY timestamp DESC LIMIT 1

그러나 나는 오히려 다음과 같은 일을 많이 할 것입니다.

SELECT * FROM table WHERE timestamp=max(timestamp)

그러나 sqlite는이 쿼리를 거부합니다.

SQL error: misuse of aggregate function max()

그만큼 선적 서류 비치 이 동작을 확인합니다 (페이지 하단) :

집계 함수는 일부 명령문에서만 사용될 수 있습니다.

내 질문은 : 선택을 주문하고 반환 된 행의 수를 1로 제한하지 않고 가장 큰 타임 스탬프로 행을 얻기 위해 쿼리를 작성할 수 있습니까? 이것은 가능한 것처럼 보이지만 내 SQL-FU가 스너프에 맞지 않는 것 같습니다.

도움이 되었습니까?

해결책

SELECT * from foo where timestamp = (select max(timestamp) from foo)

또는 SQLITE가 하위 선택을 세트로 취급해야한다고 주장하면

SELECT * from foo where timestamp in (select max(timestamp) from foo)

다른 팁

고양이를 피부하는 방법에는 여러 가지가 있습니다.

자동 증가 기능이있는 ID 열이있는 경우, TimeStamp 열에 인덱스를 넣으려면 열의 인덱싱으로 인해 ID로 마지막 레코드를 반환하면 더 빠른 쿼리가 발생합니다.

SELECT * FROM TABLE ORDER BY ID DESC LIMIT 1

지난 주 에이 질문에 5 번이 질문에 5 번 대답했다고 생각하지만 지금 당장 그 중 하나에 대한 링크를 찾기에는 너무 피곤해서 여기에 다시 ...

SELECT
     *
FROM
     table T1
LEFT OUTER JOIN table T2 ON
     T2.timestamp > T1.timestamp
WHERE
     T2.timestamp IS NULL

당신은 기본적으로 다른 행이 그보다 늦게 일치하지 않는 행을 찾고 있습니다.

참고 : 주석에서 지적한 바와 같이,이 방법은 이런 종류의 상황에서는 잘 수행되지 않습니다. 일반적으로 각 고객의 마지막 행을 원하는 상황에서는 일반적으로 (최소한 SQL Server의 경우) 더 잘 작동합니다 (예 : 예를 들어).

당신은 단순히 할 수 있습니다

테이블에서 *, max (timestamp)를 선택하십시오

편집하다:집계 기능을 사용할 수 없으므로 오류가 발생합니다. 나는 무엇을 추측한다 Squarecog 가장 좋은 일이라고 제안했습니다

SELECT * FROM table WHERE timestamp = (select max(timestamp) from table)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top