【问题标题】:MySQL query to select only last rows of groups of datesMySQL查询仅选择日期组的最后一行
【发布时间】:2011-09-04 03:35:36
【问题描述】:

我有以下疑问:

SELECT elo, date(date_calculated) date FROM users_historical_elo WHERE uid =36 order by id asc

产生这个结果:

| elo | date

|984|2011-04-04

|1010|2011-04-04

|1036|2011-04-04

|1016|2011-04-08

|1000|2011-04-08

|944|2011-04-09

|973|2011-04-09

...

我需要帮助编写一个查询,该查询仅按日期选择最后一个“elo”分组。所以输出应该是:

| elo | date

|1036|2011-04-04

|1000|2011-04-08

|973|2011-04-09

...

谢谢!

【问题讨论】:

  • 你的意思是|1016|2011-04-08,对吧?
  • 哦,对不起,你有一个order by id,好的。
  • 还有date_calculated字段吗?
  • @NAVEED,我在这里接受作为答案的代码速度是原来的两倍多,也许你应该试试这个

标签: mysql select group-by


【解决方案1】:

如果id 是表的主键,那么这样做:

SELECT elo
     , date(date_calculated) AS date
FROM users_historical_elo 
  JOIN
    ( SELECT MAX(id) AS id
      FROM users_historical_elo
      WHERE uid =36
      GROUP BY date(date_calculated)
    ) AS grp
    ON grp.id = users_historical_elo.id
ORDER BY grp.id ASC

【讨论】:

  • 获得道德额外奖励 ;) 如果我遇到同样的情况,我该如何修改此查询,但我需要选择按日期分组的 倒数第二个 elo?
【解决方案2】:

试试:

SELECT elo, date(date_calculated) date FROM users_historical_elo WHERE uid =36 group by date order by id asc

【讨论】:

    【解决方案3】:

    我认为您需要使用 MAX 和 GROUP By。见http://www.tutorialspoint.com/mysql/mysql-max-function.htm

    我认为这会奏效

    SELECT elo, MAX(date(date_calculated)) date 
    FROM users_historical_elo 
    WHERE uid =36 
    GROUP BY elo 
    ORDER BY id asc
    

    【讨论】:

      【解决方案4】:

      这个:

       SELECT elo, MAX(date) FROM users_historical_elo
      

      是否会返回任何 elo 的 elo 和最后日期,这似乎是您所要求的?

      【讨论】:

        猜你喜欢
        • 2011-11-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-03
        相关资源
        最近更新 更多