MAX(날짜)까지 선택하는 방법은?
다음은 테이블 구조입니다.
CREATE TABLE `reports` (
`report_id` int(11) NOT NULL auto_increment,
`computer_id` int(11) NOT NULL default '0',
`date_entered` datetime NOT NULL default '1970-01-01 00:00:00',
`total_seconds` int(11) NOT NULL default '0',
`iphone_id` int(11) default '0',
PRIMARY KEY (`report_id`),
KEY `computer_id` (`computer_id`),
KEY `iphone_id` (`iphone_id`)
) ENGINE=MyISAM AUTO_INCREMENT=120990 DEFAULT CHARSET=latin1
나는 필요합니다.SELECT
목록을 작성할 진술서report_id
당computer_id
최근에 입력한 것부터date_entered
어떻게 해야 할지 전혀 모르겠어요
이렇게 하면 됩니다.
SELECT report_id, computer_id, date_entered
FROM reports AS a
WHERE date_entered = (
SELECT MAX(date_entered)
FROM reports AS b
WHERE a.report_id = b.report_id
AND a.computer_id = b.computer_id
)
마지막으로 입력한 날짜만 표시하시겠습니까? 아니면 입력한 last_date로 시작하여 순서를 지정하시겠습니까?
SELECT report_id, computer_id, date_entered
FROM reports
GROUP BY computer_id
ORDER BY date_entered DESC
-- LIMIT 1 -- uncomment to only show the last date.
이에 따르면: https://bugs.mysql.com/bug.php?id=54784 을 차르로 캐스팅하면 다음과 같은 효과를 볼 수 있습니다.
SELECT report_id, computer_id, MAX(CAST(date_entered AS CHAR))
FROM reports
GROUP BY report_id, computer_id
이것은 매우 오래된 질문이지만, 저는 같은 문제로 이곳에 왔습니다. 그래서 저는 다른 사람들을 돕기 위해 이것을 여기에 남깁니다.
데이터 양 때문에 DB를 조회하는 데 5분 이상이 소요되어 질의를 최적화하려고 했습니다.제 질문은 수락된 답변의 질문과 유사했습니다.파블로의 발언이 저를 올바른 방향으로 밀어 넣었고 저의 5분 질문은 0.016초가 되었습니다.따라서 쿼리 시간이 매우 긴 다른 사용자도 상관 없는 하위 쿼리를 사용할 수 있습니다.
OP의 예는 다음과 같습니다.
SELECT
a.report_id,
a.computer_id,
a.date_entered
FROM reports AS a
JOIN (
SELECT report_id, computer_id, MAX(date_entered) as max_date_entered
FROM reports
GROUP BY report_id, computer_id
) as b
WHERE a.report_id = b.report_id
AND a.computer_id = b.computer_id
AND a.date_entered = b.max_date_entered
Pablo의 코멘트에 감사드립니다.당신 덕분에 시간이 많이 절약됐어요!
현재 타임스탬프를 사용하는 경우 이 작업이 완벽하게 수행됩니다.
SELECT * FROM reports WHERE date_entered = (SELECT max(date_entered) FROM REPORTS)
현재 타임스탬프를 사용하지 않고 날짜 및 시간 열을 개별적으로 사용하는 경우에도 작동합니다.
SELECT * FROM reports WHERE date_entered = (SELECT max(date_entered) FROM REPORTS) ORDER BY time DESC LIMIT 1
해결 방법이지만 작동 중인 솔루션
ID가 자동 증분인 경우에만 최대 날짜 대신 최대 ID를 검색할 수 있습니다.ID로 다른 모든 필드를 찾을 수 있습니다.
select *
from table
where id IN (
select max(id)
from table
group by #MY_FIELD#
)
나에게 딱 맞는 제품:
(SELECT content FROM tblopportunitycomments WHERE opportunityid = 1 ORDER BY dateadded DESC LIMIT 1);
select report_id, computer_id, date_entered
into #latest_date
from reports a
where exists(select 'x' from reports
where a.report_id = report_id
group by report_id having max(date_entered) = a.date_entered)
select * from #latest_leave where computer_id = ##
date_entered descending을 기준으로 테이블을 정렬하면 그룹화는 올바른 행을 수집합니다.
SELECT * FROM (
SELECT report_id, computer_id, date_entered ORDER BY date_entered DESC
) sorted
GROUP BY computer_id
이렇게 하면 인덱스에 전체 페이지가 표시되지만(인덱스가 세 개 열 모두를 인덱싱했다고 가정하면(그렇지 않으면 전체 테이블 스캔), 인덱스가 HDD에 있는 경우에는 가장 빠른 해결책이 될 수 있습니다.
SELECT report_id, computer_id, date_entered
FROM reports
WHERE date_entered = (
SELECT date_entered
FROM reports
ORDER date_entered
DESC LIMIT 1
)
최신 블로그를 얻기 위해 블로그 엔진에서 이 작업을 수행했습니다.저는 당신의 테이블 구조에 맞게 조정했습니다.
SELECT * FROM reports WHERE date_entered = (SELECT max(date_entered) FROM REPORTS)
제게 아주 잘 맞습니다.
SELECT
report_id,computer_id,MAX(date_entered)
FROM
reports
GROUP BY
computer_id
저는 이 솔루션을 사용하고 있으며 매우 잘 작동합니다.
SELECT
report_id,
computer_id,
date_entered
FROM reports
GROUP BY computer_id having max(date_entered)
언급URL : https://stackoverflow.com/questions/7836036/how-to-select-by-maxdate
'source' 카테고리의 다른 글
phpmyadmin에서 기본 컬렉션 변경 (0) | 2023.09.04 |
---|---|
UTF-8에서 문자열 인코딩 (0) | 2023.09.04 |
요소 인덱스를 상위 요소에 대한 하위 요소로 가져옵니다. (0) | 2023.09.04 |
MySql 트랜잭션은 콘솔에서만 작동합니다. (0) | 2023.09.04 |
경고:창 계층 구조에 없는 *에 * 표시 시도 - swift (0) | 2023.09.04 |