복붙노트

[SQL] 어떻게 MAX (날짜)에 의해 선택하는 방법?

SQL

어떻게 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

나는 최근이 date_entered 입력 한에서 COMPUTER_ID 당 REPORT_ID를 나열하는 SELECT 문을해야하고, 어떻게 그렇게하는 단서가 없다. 올바른 방향으로 누구 포인트 나 수 있습니까? 사전에 들으.

해결법

  1. ==============================

    1.이것은을 수행해야합니다

    이것은을 수행해야합니다

    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
    )
    
  2. ==============================

    2.당신은 단지 LAST_DATE ENTERED로 시작하여 마지막 date_entered, 또는 순서를 보여주기를 원하는 있습니까?

    당신은 단지 LAST_DATE ENTERED로 시작하여 마지막 date_entered, 또는 순서를 보여주기를 원하는 있습니까?

    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.
    
  3. ==============================

    3.https://bugs.mysql.com/bug.php?id=54784 트릭을해야 문자로 캐스팅이에 따르면 :

    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
    
  4. ==============================

    4.나는 최대 (date_entered)를 가진이 솔루션을 사용하고 아주 잘 작동

    나는 최대 (date_entered)를 가진이 솔루션을 사용하고 아주 잘 작동

    SELECT 
      report_id, 
      computer_id, 
      date_entered
    FROM reports
    GROUP BY computer_id having max(date_entered)
    
  5. ==============================

    5.이것은 아주 오래된 질문이지만, 내가 어떤 다른 사람들을 돕기 위해 여기를 떠나고, 그래서 나는 때문에 동일한 문제가 여기에왔다.

    이것은 아주 오래된 질문이지만, 내가 어떤 다른 사람들을 돕기 위해 여기를 떠나고, 그래서 나는 때문에 동일한 문제가 여기에왔다.

    이 때문에 데이터의 양에 DB를 쿼리하는 데 5 분 이상을 복용했기 때문에 나는 쿼리를 최적화하기 위해 노력했다. 내 쿼리는 허용 대답의 쿼리와 유사했다. 파블로의 의견은 올바른 방향으로 날 밀어 내 오분 쿼리는 0.016 초되었다. 그래서 상관 하위 쿼리를 사용하려고 매우 긴 쿼리 시간을 겪고있는 다른 사람을 도울 수 있습니다.

    영업에 대한 예는 다음과 같습니다

    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
    

    주석 당신에게 파블로 감사드립니다. 당신은 나에게 큰 시간을 절약!

  6. ==============================

    6.해결 방법하지만 작업 솔루션

    해결 방법하지만 작업 솔루션

    ID가 자동 증가가 경우에만, 당신은 최대 대신 ID의 최대 날짜를 검색 할 수 있습니다. 그래서, ID에 의해 당신은 다른 모든 필드를 찾을 수 있습니다.

    select *
    from table
    where id IN ( 
                  select max(id)
                  from table
                  group by #MY_FIELD#
                  )
    
  7. ==============================

    7.나를 위해 완벽하게 작동 :

    나를 위해 완벽하게 작동 :

    (SELECT content FROM tblopportunitycomments WHERE opportunityid = 1 ORDER BY dateadded DESC LIMIT 1);
    
  8. ==============================

    8.그것은 나를 위해 잘 작동합니다

    그것은 나를 위해 잘 작동합니다

    SELECT 보고서 GROUP BY의 COMPUTER_ID로부터, COMPUTER_ID, MAX을 (date_entered) REPORT_ID

  9. ==============================

    9.

    SELECT report_id, computer_id, date_entered
    FROM reports
    WHERE date_entered = (
        SELECT date_entered 
        FROM reports 
        ORDER date_entered 
        DESC LIMIT 1
    )
    
  10. ==============================

    10.최신 블로그를 얻을 수있는 블로그 엔진이나요. 나는 당신의 테이블 구조에 적응.

    최신 블로그를 얻을 수있는 블로그 엔진이나요. 나는 당신의 테이블 구조에 적응.

    SELECT * FROM reports WHERE date_entered = (SELECT max(date_entered) FROM REPORTS)
    
  11. from https://stackoverflow.com/questions/7836036/how-to-select-by-maxdate by cc-by-sa and MIT license