복붙노트

[SQL] SQL 그룹에 의해 및 최대

SQL

SQL 그룹에 의해 및 최대

나는 테이블에 다음과 같은 데이터를 가지고 :

id  name    alarmId  alarmUnit  alarmLevel

1   test    voltage  psu        warning
2   test    voltage  psu        ceasing
3   test    voltage  psu        warning
4   test    temp     rcc        warning
5   test    temp     rcc        ceasing

나는 결과는 다음과 같아야하므로, 모든 열 그룹 (경보, 경보 장치)에 대한 가장 최근의 정보를 표시하고 싶습니다 :

3   test    voltage  psu        warning
5   test    temp     rcc        ceasing

지금까지 시도했다 :

SELECT MAX (ID)와 같은 ID, 이름, alarmId, alarmUnit, ALARMLEVEL GROUP BY alarmId, alarmUnit;

선정 된 ID는 벌금을 것 같다하지만, 선택된 행은 그들에게 해당되지 않습니다. 당신이 나를 도울 수?

해결법

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

    1.오라클, SQL 서버 2005 +과 PostgreSQL 8.4 :

    오라클, SQL 서버 2005 +과 PostgreSQL 8.4 :

    SELECT  *
    FROM    (
            SELECT  *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
            FROM    mytable
            ) q
    WHERE   rn = 1
    

    MySQL은 :

    SELECT  mi.*
    FROM    (
            SELECT  alarmId, alarmUnit, MAX(id) AS mid
            FROM    mytable
            GROUP BY
                    alarmId, alarmUnit
            ) mo
    JOIN    mytable mi
    ON      mi.id = mo.mid
    

    PostgreSQL의 8.3 아래에서 :

    SELECT  DISTINCT ON (alarmId, alarmUnit) *
    FROM    mytable
    ORDER BY
            alarmId, alarmUnit, id DESC
    
  2. ==============================

    2.당신은 최대의 열을 얻고 싶은 경우에, 당신은 아마 하위 쿼리를해야합니다. 뭔가 같은 :

    당신은 최대의 열을 얻고 싶은 경우에, 당신은 아마 하위 쿼리를해야합니다. 뭔가 같은 :

    SELECT *
    FROM YourTable
    WHERE id IN (
        SELECT MAX(id) FROM YourTable GROUP BY alarmId, alarmUnit
        )
    
  3. ==============================

    3.시험:

    시험:

    SELECT * FROM table WHERE id IN
      (SELECT MAX(id) FROM table GROUP BY alarmId, alarmUnit)
    
  4. ==============================

    4.아마 다음과 같은 시도 :

    아마 다음과 같은 시도 :

    SELECT id,name,alarmId,alarmUnit,alarmLevel
    FROM table
    WHERE id IN (SELECT Max(id) FROM table GROUP BY alarmId, alarmUnit)
    

    당신은 선택 쿼리 하위에 alarmId 및 alarmUnit을 포함 할 수 있습니다.

  5. ==============================

    5.

    select id, name, alarmID, alarmUnit, alarmLevel
    from (select max(id) as id
    from table
    group by alarmID, alarmUnit) maxID
    inner join table
    on table.id = maxID.id
    
  6. from https://stackoverflow.com/questions/1299556/sql-group-by-max by cc-by-sa and MIT license