mysql - 根据列选择最后n条记录

标签 mysql sql

我有一个存储汽车价格的表,其结构如下:

+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
| model           | varchar(255) | YES  |     | NULL    |                |
| make            | varchar(255) | YES  |     | NULL    |                |
| year            | varchar(255) | YES  |     | NULL    |                |
| avg_price       | decimal(8,2) | YES  |     | NULL    |                |
| median_price    | decimal(8,2) | YES  |     | NULL    |                |
| created_at      | datetime     | YES  |     | NULL    |                |
| updated_at      | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

给定年份的数据可能会在不同时间插入。

For example model 'Honda', make 'Accord' might have results like:
+------+-----------+--------------+--------+---------------------+
| year | avg_price | median_price | model  | created_at          |
+------+-----------+--------------+--------+---------------------+
| 1992 |   2431.29 |      2000.00 | accord | 2012-02-23 17:31:41 |
| 1993 |   2609.13 |      2195.00 | accord | 2012-02-23 17:31:44 |
| 1994 |   2858.81 |      2400.00 | accord | 2012-02-23 17:31:44 |
| 2000 |   4771.99 |      4450.00 | accord | 2012-02-23 17:31:46 |
| 2001 |   5260.16 |      5000.00 | accord | 2012-02-23 17:31:46 |
| 2000 |   4860.19 |      4795.00 | accord | 2012-08-15 06:09:52 |
| 2001 |   5071.49 |      4990.00 | accord | 2012-08-15 06:09:52 |
| 2002 |   5872.80 |      5795.00 | accord | 2012-08-15 06:09:52 |
| 2003 |   7521.44 |      7950.00 | accord | 2012-08-15 06:09:52 |
| 2004 |   8348.19 |      8495.00 | accord | 2012-08-15 06:09:52 |

我想检索所有本田雅阁汽车制造年份的最新数据。

所以在上面的示例中,我想从 2012-08-15 06:09:52 检索 2000、2001、2002、2003、2004 年的数据 但较早的年份将从 2012-02-23 17:31:41 开始

select year,avg_price,median_price,model,created_at 
from car_prices 
where make='honda' and    model= 'accord' group by year asc

上述查询获取每年的不同数据,但不是每年插入的最后一条记录。

关于如何获取每年和最新的不同数据有什么想法吗?

最佳答案

SELECT p.*
FROM car_prices p
JOIN (SELECT year, MAX(created_at) latest
      FROM car_prices
      WHERE make = 'honda' AND model = 'accord'
      GROUP BY year) mp
ON p.year = mp.year AND p.created_at = mp.latest
WHERE p.make = 'honda' AND p.model = 'accord'

关于mysql - 根据列选择最后n条记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12067814/

相关文章:

php - 如何制作安全的注册表单

java - 有没有任何工具或技术可以识别打开的结果集

SQL Server - 来自不同表的 CTE 递归 SUM 值

php - SQL 当用户选择一个数据时,其他数据也会被选择

php - foreach 与 mysqli_multi_query 问题

SQL选择,匹配一列但不匹配另一列

c# - TSQL 从列可能不存在的临时表插入

mysql - SQL中表的第一个和第二个日期

MySQL Replace() 函数不能为非拉丁字符提供正确的输出

php - 如何在 Mysql 和 PHP 中创建 'rising' 或 'What' 的热查询?