My table is like this (np_capacity):
我的表是这样的(np_capacity):
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
I want to select all the tower with the max date then for those towers I also want the min capacity value in the table.
我想选择具有最大日期的所有塔,然后对于那些塔我也想要表中的最小容量值。
Result would be:
结果将是:
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
What I have is this but it doesnt always give my the correct min values.
我有这个,但它并不总是给我正确的最小值。
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
3 个解决方案
#1
1
You can use a subselect to calculate the min capacity, and the max date. Then, join with the table to get other fields.
您可以使用子选择来计算最小容量和最大日期。然后,与表连接以获取其他字段。
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)
This request select all towers, and for each the maxdatetime and mincapacity.
此请求选择所有塔,并为每个塔选择maxdatetime和mincapacity。
If you want just the towers with the maxdatetime, you can use :
如果您只想要具有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)
#2
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`);
Test the above query on SQL Fiddle
在SQL Fiddle上测试上面的查询
#3
0
Another answer is by using order by and limit 1 in sub query :
另一个答案是在子查询中使用order by和limit 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);
Test it on sqlfiddle
在sqlfiddle上测试它
#1
1
You can use a subselect to calculate the min capacity, and the max date. Then, join with the table to get other fields.
您可以使用子选择来计算最小容量和最大日期。然后,与表连接以获取其他字段。
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)
This request select all towers, and for each the maxdatetime and mincapacity.
此请求选择所有塔,并为每个塔选择maxdatetime和mincapacity。
If you want just the towers with the maxdatetime, you can use :
如果您只想要具有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)
#2
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`);
Test the above query on SQL Fiddle
在SQL Fiddle上测试上面的查询
#3
0
Another answer is by using order by and limit 1 in sub query :
另一个答案是在子查询中使用order by和limit 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);
Test it on sqlfiddle
在sqlfiddle上测试它