2016-05-29 26 views
1

我的表是這樣的(np_capacity):如何使用MAX(日期時間)選擇行並獲取列的最小值?

id tower datetime    capacity 
---|----|---------------------|---------- 
1 | A | 2016-05-29 09:02:41 | 34676 
2 | B | 2016-05-29 09:02:41 | 10736 
5 | C | 2016-05-29 09:02:41 | 55664 
3 | D | 2016-05-29 09:02:41 | 32622 
4 | A | 2016-05-29 13:08:38 | 5474 
6 | B | 2016-05-29 13:08:38 | 20692 
7 | C | 2016-05-29 13:08:38 | 134802 
8 | D | 2016-05-29 13:08:38 | 4754 

我想選擇所有的最大日塔那麼對於那些塔我也想在表中的最小容量值。

結果將是:

id tower datetime    capacity MinCapacity 
---|----|---------------------|----------|------------- 
4 | A | 2016-05-29 13:08:38 | 5474  | 5474 
6 | B | 2016-05-29 13:08:38 | 20692 | 10736 
7 | C | 2016-05-29 13:08:38 | 134802 | 55664 
8 | D | 2016-05-29 13:08:38 | 4754  | 4754 

什麼我是這樣的,但它並不總是給我正確的最小值。

SELECT npc.*, groupedcap.MinCapacity 
FROM np_capacity npc 
INNER JOIN 
(SELECT tower, MAX(date) AS MaxDate 
FROM np_capacity 
GROUP BY tower) groupednpc 
ON npc.tower = groupednpc.tower 
INNER JOIN 
(SELECT tower, MIN(capacity) AS MinCapacity 
FROM np_capacity 
GROUP BY tower) groupedcap 
ON npc.tower = groupedcap.tower 
AND npc.date = groupednpc.MaxDate 
+0

LEAST()如何? – Strawberry

+0

'LEAST()'有什麼幫助? – sagi

回答

1

您可以使用subselect來計算最小容量和最大日期。然後,加入表格以獲取其他字段。

select npc.*, calc.minCapacity 
from (
    select tower, max(datetime) maxDate, min(capacity) minCapacity 
    from np_capacity 
    group by tower 
) calc 
join np_capacity npc on (npc.tower = calc.tower 
         and npc.datetime = npc.maxDate) 

這要求選擇所有的塔,併爲每個maxdatetime和mincapacity。

如果你只想用maxdatetime塔,你可以使用:

select npc.*, (select min(c2.capacity) from np_capacity c2 
       where c2.tower = npc.tower) minCapacity 
from (select max(datetime) maxDatetime from np_capacity) c1 
join np_capacity npc on (npc.datetime = c1.maxDatetime) 
+0

非常感謝。是的,我只想要maxdatetime的塔樓,正是我一直在尋找的。 – Vlad

0
SELECT `a`.`id`,`a`.`tower`,`a`.`datetime`,`a`.`capacity`,(SELECT MIN(`b`.`capacity`) 
FROM `np_capacity` `b` WHERE `b`.`tower`=`a`.`tower`) AS `MinCapacity` FROM `np_capacity` `a` 
WHERE `a`.`datetime`=(SELECT MAX(`datetime`) FROM `np_capacity`); 

測試上SQL Fiddle

0

另一個答案以上查詢是由和子限制1使用順序查詢:

select t1.*,(select capacity from np_capacity t3 
    where t1.tower=t3.tower 
    order by capacity limit 1) mincapacity 
    from np_capacity t1 where 
datetime=(select datetime from np_capacity 
    order by datetime desc limit 1); 

測試它sqlfiddle

相關問題