source

MAX(날짜)까지 선택하는 방법은?

ittop 2023. 9. 4. 20:40
반응형

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_idcomputer_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

반응형