【问题标题】:How can I get the most recent date using MySQL如何使用 MySQL 获取最近的日期
【发布时间】:2012-01-04 13:10:40
【问题描述】:

如何使用 MySQL 获取最近的日期?我尝试了 max 但我没有得到我想要的结果。我的桌子是这样的:

+---------+---------+-----------------------+--------+------------+---------+
| Name    | idStore | Name                  | idItem | date       | price   |
+---------+---------+-----------------------+--------+------------+---------+
| walmart |       1 | Red Delicious Apples  |      1 | 2011-10-22 | 0.98000 |
| walmart |       1 | Red Delicious Apples  |      1 | 2011-10-28 | 0.98000 |
| walmart |       1 | Red Delicious Apples  |      1 | 2011-10-28 | 0.98000 |
| walmart |       1 | Red Delicious Apples  |      1 | 2011-11-22 | 0.98000 |
| walmart |       1 | Honeycrisp Apples     |      2 | 2011-10-22 | 1.98000 |
| walmart |       1 | Sonya Apples          |      3 | 2011-10-22 | 2.88000 |
| walmart |       1 | Gold Delicious Apples |      4 | 2011-10-22 | 0.98000 |
| walmart |       1 | Sweet Tango Apples    |      5 | 2011-10-22 | 2.48000 |
| walmart |       1 | Granny Smith Apples   |      6 | 2011-10-22 | 1.28000 |
| walmart |       1 | Fugi Apples           |      7 | 2011-10-22 | 1.38000 |
+---------+---------+-----------------------+--------+------------+---------+

我想要这张桌子:

+---------+---------+-----------------------+--------+------------+---------+
| Name    | idStore | Name                  | idItem | date       | price   |
+---------+---------+-----------------------+--------+------------+---------+
| walmart |       1 | Red Delicious Apples  |      1 | 2011-11-22 | 0.98000 |
| walmart |       1 | Honeycrisp Apples     |      2 | 2011-10-22 | 1.98000 |
| walmart |       1 | Sonya Apples          |      3 | 2011-10-22 | 2.88000 |
| walmart |       1 | Gold Delicious Apples |      4 | 2011-10-22 | 0.98000 |
| walmart |       1 | Sweet Tango Apples    |      5 | 2011-10-22 | 2.48000 |
| walmart |       1 | Granny Smith Apples   |      6 | 2011-10-22 | 1.28000 |
| walmart |       1 | Fugi Apples           |      7 | 2011-10-22 | 1.38000 |
+---------+---------+-----------------------+--------+------------+---------+

我很难弄清楚这一点。谢谢!

【问题讨论】:

  • 你不是唯一一个很难弄清楚这一点的人。我建议你通过给出一些你试图得到结果的代码来详细说明,这样我们就可以看到它为什么不起作用。

标签: php mysql database relational-database greatest-n-per-group


【解决方案1】:

见SQL Select only rows with Max Value on a Column

SELECT yt1.*
FROM yourtable yt1
LEFT OUTER JOIN yourtable yt2 ON (yt1.idItem = yt2.idItem AND yt1.date < yt2.date)
WHERE yt2.idItem IS NULL;

【讨论】:

    【解决方案2】:

    在线示例查询

    https://data.stackexchange.com/stackoverflow/q/118881/how-can-i-get-the-most-resent-date-using-mysql

    SELECT NameStore, idStore, Name, idItem, max(date) AS date, price
    FROM tablename
    GROUP by NameStore, idStore, Name, idItem, price
    ORDER BY date DESC, idItem ASC
    

    【讨论】:

    • 注意:如果他真的只想要最近的日期以及该日期适用的价格,这将不起作用,而不管其他价格可能适用于较早的日期。
    【解决方案3】:

    您必须像这样使用GROUP BY 子句:

    SELECT Name, idStore, Name, idItem, date, price 
    FROM mytable 
    GROUP BY idItem 
    ORDER BY date DESC, idItem DESC;
    

    使用 DESC 或 ASC 更改订单方向。您可以阅读文档了解更多信息。

    【讨论】:

      【解决方案4】:

      把这个放在最后ORDER BY date DESC

      所以让它看起来像这样:

      SELECT * FROM `tablename` ORDER BY `date` DESC
      

      在上面的 SQL 语句中使用 DISTINCT(Name) 或 GROUP BY Name 会使一个项目只弹出一次。

      【讨论】:

      • 但他也希望每个 idItem 只看到一行。提示:分组?
      • 然后查看 this link 以获得不同的值
      • -1 order by 不是他需要的;这仍然会保留重复的日期。
      • "如何使用 MySQL 获取最近的日期?"是问题,抱歉回答。
      【解决方案5】:

      您可以使用分组方式:

      select NameStore, idStore, Name, idItem, max(date) date, price
      from table
      group by NameStore, idStore, Name, idItem, price
      

      【讨论】:

      • 谢谢,速度很快。
      猜你喜欢
      • 2016-07-07
      • 2014-03-10
      • 2012-10-13
      • 2021-10-28
      • 2022-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多