2016-11-21 45 views
1

我有一個小項目,我的工作,並具有以下設置分組:MySQL的獲取最小,最大和最古老的

MariaDB [b7_19195200_prices]> select * from watchlist; 
+----+-------------+-------+---------------------+--------+ 
| id | item  | price | recorded   | errors | 
+----+-------------+-------+---------------------+--------+ 
| 3 | 32725999014 | 1.46 | 2016-11-21 20:30:22 |  0 | 
| 4 | 32725999014 | 1.93 | 2016-11-21 20:56:21 |  0 | 
| 5 | 32725999014 | 2.01 | 2016-11-21 20:56:32 |  0 | 
| 6 |  122444 | 22.43 | 2016-11-21 21:03:19 |  0 | 
| 7 | 32725999014 | 1.11 | 2016-11-21 21:25:33 |  0 | 
+----+-------------+-------+---------------------+--------+ 
5 rows in set (0.00 sec) 

所以我想獲得價格的最大的,最小价格和第一個(該項目的價格最早記錄)。所以我會得到如下結果:

+----+-------+-------+-------------+----------+ 
| id | low | high | item  | original | 
+----+-------+-------+-------------+----------+ 
| 6 | 22.43 | 22.43 |  122444 | 12.11 | 
| 3 | 1.11 | 2.01 | 32725999014 | 0.51 | 
+----+-------+-------+-------------+----------+ 

其中低,高和原始分別是該物品的最低,最高和原始價格。獎金將能夠知道什麼時候最高和最低。我一直在使用獲得最高,最低及原價格爲2個不同的查詢:

SELECT `id`, MIN(`price`) low, MAX(`price`) high, `item` 
FROM `watchlist` 
GROUP BY `item`; 

SELECT `id`, MIN(`recorded`), `price` original, `item` 
FROM `watchlist` 
GROUP BY item; 

反正我能做到嗎?

謝謝!

+0

您的價格數據類型是DECIMAL,對不對? – Strawberry

+0

不,它不是。我把它作爲varchar – wiZZmnma

+0

好的。也許解決它! – Strawberry

回答

1

,如果你不需要,你可以使用id聯接

select t1.*, t2.* 
from ( 
    SELECT MIN(`price`) low, MAX(`price`) high, `item` 
    FROM `watchlist` 
    GROUP BY `item` 
) t1 
left join (
    SELECT MIN(`recorded`), `price` original, `item` 
    FROM `watchlist` 
    GROUP BY item 
) t2 on t1.`item` = t2.`item` 

否則,如果您還需要在ID加入和元組的子查詢

select t1.*, t2.* 
from ( 
    SELECT MIN(`price`) low, MAX(`price`) high, `item` 
    FROM `watchlist` 
    GROUP BY `item` 
) t1 
left join (
    select `id`, `recorded`, `price`, `item` 
    from `watchlist` 
    where ( `item`, `recorded`) in (
     select `item`, min(`recorded`) 
     FROM `watchlist` 
     GROUP BY item 
) 
) t2 on t1.`item` = t2.`item` 

第二應該是becase的選擇正確行解釋並獲得非聚合值的第一個結果

+0

我不需要id。這個人得到一個關於錯誤查詢(1248)的錯誤:每個派生表都必須有自己的別名' – wiZZmnma

+0

@wiZZmnma答案更新..從...丟失t1() – scaisEdge

+0

黃金!非常感謝!公認 – wiZZmnma