SELECT语句获取最新行

时间:2012-05-15 08:59:55

标签: mysql datetime group-by

我被指派在一个网站上进行进一步的开发,这个网站目前是便利店经理的网站,用于监控“一周的杂货袋”内的文章。这位前开发人员做了非常草率的工作,所以每当经理们想:“该死的!我需要编辑这篇文章,因为我刚刚输入错误的值”。他们必须输入一个同名的新文章,然后他们有两篇同名的文章,但价格和DATE_TIME(输入文章的日期和时间)不同。数据库看起来像这样:

________________________________________________
|___itemId___|___price___|______date_time______|
|     1      |    2.30   | 2012-01-01 00:00:00 |
|     2      |    1.50   | 2012-01-01 00:00:00 |
|     3      |    5.99   | 2012-01-01 00:00:00 |
|     4      |    0.99   | 2012-01-01 00:00:00 |
|     4      |    2.00   | 2012-01-01 00:10:00 |
|     4      |    4.99   | 2012-01-01 00:20:00 |
|     5      |   10.00   | 2012-01-01 00:00:00 |
|     6      |   39.99   | 2012-01-01 00:00:00 |

我正在处理 SELECT itemId,price,MAX(date_time)FROM myTable 以获取每个项目的最新行,如下所示:

________________________________________________
|___itemId___|___price___|______date_time______|
|     1      |    2.30   | 2012-01-01 00:00:00 |
|     2      |    1.50   | 2012-01-01 00:00:00 |
|     3      |    5.99   | 2012-01-01 00:00:00 |
|     4      |    4.99   | 2012-01-01 00:20:00 |
|     5      |   10.00   | 2012-01-01 00:00:00 |
|     6      |   39.99   | 2012-01-01 00:00:00 |

但我得到的是:

________________________________________________
|___itemId___|___price___|______date_time______|
|     4      |    4.99   | 2012-01-01 00:20:00 |

有人可以帮我解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

添加GROUP BY子句:

SELECT itemId, price, MAX(date_time)
FROM myTable 
GROUP BY itemId

答案 1 :(得分:1)

尝试使用group bydistinct

答案 2 :(得分:1)

SELECT t0.itemId, 
       t0.price, 
       t0.date_time 
FROM   myTable AS t0 
       LEFT JOIN myTable AS t1 
         ON t0.itemId = t1.itemId 
            AND t1.date_time > t0.date_time 
WHERE  t1.itemId IS NULL;