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

带group by和order by的mysql查询

  •  2
  • f00860  · 技术社区  · 15 年前

    我有一张这样的桌子:

    .--------------------------------.
    | Name  | XX | Date              |
    .--------------------------------.
    | N1    | 5  | 2009-05-01        |
    | N1    | 10 | 2008-01-08        |
    | N2    | 8  | 2009-02-02        |
    .________________________________.
    

    我的结果应该是:

    .------------.
    | Name  | XX |
    .------------.
    | N1    | 5  |
    | N2    | 8  |
    .____________.
    

    我只需要按名称分组的行,但只需要最新的行。我不希望在本例中使用xx=10的行,因为日期为2009-05-01>2008-01-08。

    我不知道如何按日期排序和分组:(

    3 回复  |  直到 15 年前
        1
  •  2
  •   Hosam Aly    15 年前

    您希望分组的目的是什么?

    select Name, XX
      from yourTable t1
     where Date = (select MAX(Date)
                     from yourTable t2
                    where t1.Name = t2.Name)
    

    如果您需要为最后一天合计xx,则:

    select Name, SUM(XX)
      from yourTable t1
     where Date = (select MAX(Date)
                     from yourTable t2
                    where t1.Name = t2.Name)
     group by Name
    
        2
  •  0
  •   Justin Giboney    15 年前
    SELECT Name, XX FROM myTable GROUP BY Name ORDER BY Date DESC
    

    您可能需要在日期字段周围加引号。

    `Date`
    
        3
  •  0
  •   grateful.dev    15 年前

    对不起,这两个都错了。

    你应该

    SELECT Name, XX
     FROM t1
     JOIN (SELECT Name, max(date)
            FROM t1
            GROUP BY Name) subquery
       ON t1.Name = subquery.Name AND t1.Date = subquery.Date