최신 타임스탬프별 MySQL 선택
SO에 대한 몇 가지 비슷한 유형의 질문을 보았지만, 특정 문제에 대한 해결책을 찾을 수 없었습니다. (참고로, 이것들은 제 실제 칼럼이 아니라 간략한 예일 뿐입니다.)
기본 테이블이 있습니다.my_table
:
user_1 | user_2 | 타임스탬프 | 참고(표의 일부가 아님) |
---|---|---|---|
23 | 25 | 2012-08-10 22:00:00 | |
24 | 22 | 2012-08-10 19:00:00 | <=== 이 행을 반환하고 싶습니다. |
24 | 22 | 2012-08-10 17:00:00 | |
21 | 17 | 2012-08-10 15:00:00 |
그래서 제가 하고 싶은 일은 다음과 같습니다.
1) Select the "newest" row, based on timestamp AND
2) Select the 'user_2' column when given a value.
저는 다음과 같은 것을 시도했습니다.
SELECT *
FROM my_table
WHERE user_2 = 22
AND timestamp = (
SELECT MAX( timestamp )
FROM my_table )
LIMIT 1
그러나 이것은 제가 찾고 있는 행을 반환하지 않습니다.이 쿼리를 수정하는 데 도움이 된다면 매우 좋을 것입니다.
정말 고마워요.
SELECT * FROM my_table -- standard stuff
WHERE user_2 = 22 -- predicate
ORDER BY timestamp DESC -- this means highest number (most recent) first
LIMIT 1; -- just want the first row
편집:
그런데 원래 쿼리가 작동하지 않는 이유가 궁금할 경우 다음과 같이 설명합니다.
- 에서 물건을 고르다
my_table
... - 어디에
user_2
= 22 - 그리고.
timestamp
(어느 정도의 가치, 일단 접어둡시다) - 한도 1
자, 다시 그 이야기로 돌아가서,timestamp
값은 하위 쿼리에서 가져옵니다.
SELECT MAX( timestamp ) FROM my_table
이 하위 쿼리는 다음을 기준으로 행을 제한하지 않습니다.user_2
전체 테이블의 최대 타임스탬프가 얼마인지 묻습니다.최대 타임스탬프는 위 표의 첫 번째 타임스탬프입니다. (user_1 = 23, user_2 = 25, timestamp = 2012-08-10 22:00:00).
이제 이를 다시 최상위 쿼리에 연결해 보겠습니다.
- 에서 물건을 고르다
my_table
... - 여기서 user_2 = 22
- 및 타임스탬프 = 2012-08-10 22:00:00
- 한도 1
그리고 당신은 그런 다툼이 없다는 것을 알 수 있습니다.
SQL Server에서 유사한 문제가 발생한 경우 이 방법이 사용자에게 유용합니다(이전 게시물에서 제안한 MySQL 쿼리는 SQL Server에서 작동하지 않음).
SELECT * FROM my_table
WHERE timestamp = ( SELECT MAX( timestamp ) FROM my_table
WHERE user_2 = 22 )
또 다른 방법은GROUP BY
그user_2
계산할 열MAX(timestamp)
그렇게 하면 됩니다.MAX(timestamp)
전체 테이블의 최신 날짜가 아니라 동일한 레코드 그룹에 대한 최신 타임스탬프를 계산합니다.user_2
가치.
예를 들어, 다음과 같은 질문이 있을 수 있습니다.
SELECT * FROM my_table
WHERE user_2 = 22
AND timestamp =
(SELECT MAX(timestamp) FROM my_table
WHERE user_2 = 22
GROUP BY user_2)
LIMIT 1;
이 질문은 제가 이 훌륭한 답변에서 찾은 답변에서 수정한 것입니다.
이게 내가 가진 전부야.
SELECT timestamp
FROM my_table
WHERE user_22 = '22'
ORDER BY timestamp DESC /*or ASC*/
그리고 당신이 그것을 질문할 때 코드는
while($row = mysql_fetch_array(the sql query)){
$timestamp = $row['timestamp']
}
이 문제에 대한 해결책은 다음과 같습니다.
SELECT *
FROM my_table AS t1
WHERE user_2 = 22
AND timestamp = (
SELECT MAX( timestamp )
FROM my_table AS t2
WHERE t1.user_2 = t2.user_2 );
간단히 제거WHERE user_2 = 22
각 고유 사용자에 대한 최신 타임스탬프를 확인하려는 경우.
언급URL : https://stackoverflow.com/questions/11912221/mysql-select-by-newest-timestamp
'programing' 카테고리의 다른 글
테스트 파일 하위 테스트 시작 서버 mysql을 만들 수 없습니다. (0) | 2023.09.04 |
---|---|
Git 태그를 재생성한 후 "태그가 원격에 이미 있습니다" 오류가 발생했습니다. (0) | 2023.09.04 |
UI 레이블의 textColor 속성을 애니메이션화하는 방법은 무엇입니까? (0) | 2023.09.04 |
Docker 명령의 --net=host 옵션은 실제로 무엇을 합니까? (0) | 2023.09.04 |
select2 - 검색 상자 숨기기 (0) | 2023.08.15 |