代码之家  ›  专栏  ›  技术社区  ›  theShingles

SQL“Group By”VarChar字段,具有最大日期或相同日期的所有结果

  •  0
  • theShingles  · 技术社区  · 16 年前

    假设我有这张桌子

    --------------------------------------------------------------
    |  ID  |  DATE  |  GROUPNAME  |  RESULT  |  INFO1  |  INFO2  |
    --------------------------------------------------------------
    | 1    | 01/06  | Group1      | 12345    | Abc     | xxxx    |
    | 2    | 01/04  | Group2      | 54321    | AAA     | zzzz    |
    | 3    | 01/03  | Group3      | 11111    | BBB     | zzzz    |
    | 4    | 01/06  | Group1      | 22222    | Def     | xxxx    |
    | 5    | 01/02  | Group3      | 33333    | CCC     | yyyy    |
    --------------------------------------------------------------
    

    groupname 并返回该日期之后的所有结果 . 并按 组名字

    例如,我的结果是

    1 | 01/06 | Group1 | 12345 | Abc | xxxx
    4 | 01/06 | Group1 | 22222 | Def | xxxx
    2 | 01/04 | Group2 | 54321 | AAA | zzzz
    3 | 01/03 | Group3 | 11111 | BBB | zzzz
    

    非常感谢。

    3 回复  |  直到 16 年前
        1
  •  2
  •   OMG Ponies    16 年前

    除非我遗漏了什么:

    SELECT t.id,
           t.date,
           t.groupname,
           t.result,
           t.info1,
           t.info2
      FROM TABLE t
      JOIN (SELECT t.groupname,
                   MAX(t.date) 'maxd'
              FROM TABLE t
          GROUP BY t.groupname) x ON x.groupname = t.groupname
                                 AND x.maxd = t.date
    ORDER BY t.groupname
    
        2
  •  2
  •   ristonj    16 年前
    SELECT TABLE.ID, TABLE.DATE, TABLE.GROUPNAME, TABLE.RESULT, TABLE.INFO1, TABLE.INFO2
    FROM TABLE INNER JOIN (SELECT GROUPNAME, MAX(DATE) FROM TABLE GROUP BY GROUPNAME) T
    ON TABLE.GROUPNAME = T.GROUPNAME AND TABLE.DATE = T.DATE
    ORDER BY TABLE.GROUPNAME 
    
        3
  •  0
  •   TeKapa    16 年前

    试试这个:

    Width (
    Select max(Date), groupname
    from Table
    group gy groupname
    ) AS T1
    Select T2.id,
           T2.Date,
           T2.groupname,
           T2.result,
           T2.info1,
           T2.info2
    from T1 
    left join Table T2 
    on (T1.date = T2.date 
    AND T1.groupname = T2.groupname) 
    order by groupname