簡體   English   中英

選擇具有MAX(datetime)的行,並且還獲得帶有列日期的min值?

[英]Select rows with MAX(datetime) and also get min values with their dates for a column?

我的表是這樣的(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

這是我的查詢:

SELECT npc.*,
                (SELECT min(c2.capacity) FROM np_capacity c2 WHERE c2.tower = npc.tower AND datetime BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW()) minCapacity,

                FROM (SELECT max(datetime) maxDatetime FROM np_capacity) c1
                JOIN np_capacity npc ON (npc.datetime = c1.maxDatetime)

它將選擇所有具有最大日期時間的塔,然后對於這些塔,還將在表中選擇過去兩周的最小容量值。 輸出是這樣的:

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

到目前為止一切都很好。 datetime用於max(datetime),而MinCapacity是過去兩周的最小值,也是我想要的。 我如何也可以為選定的MinCapacity獲取特定的日期時間。 (MinCapacityDate)

您可以嘗試一下,如SQLFiddle所示 如果容量最小的行多於1個,它將返回最近的日期。

SELECT np_capacity.id, np_capacity.tower, np_capacity.datetime
        ,np_capacity.capacity, mincap.mincapacity
         ,  MAX(tmincapdatetime.datetime) AS datetimeOfMin
FROM (SELECT MAX(`datetime`) AS maxdatetime 
      FROM np_capacity) AS tmaxdatetime
JOIN np_capacity
  ON tmaxdatetime.maxdatetime = np_capacity.`datetime`
LEFT JOIN (SELECT tower, MIN(capacity) as mincapacity
           FROM np_capacity
           WHERE `datetime` BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW()
           GROUP BY tower) AS mincap
  ON mincap.tower = np_capacity.tower  
LEFT JOIN np_capacity AS tmincapdatetime
   ON tmincapdatetime.`datetime` BETWEEN (NOW() - INTERVAL 14 DAY) AND NOW()
      AND mincap.tower = tmincapdatetime.tower
      AND mincap.mincapacity = tmincapdatetime.capacity
GROUP BY np_capacity.id, np_capacity.tower, np_capacity.datetime
  ,np_capacity.capacity, mincap.mincapacity
ORDER BY tower;

您可能需要加入和在哪里

select a.*, b.min(capacity) 
from np_capacity as a
where a.tower, datetime in (      
    select tower, max(datetime) 
    from np_capacity 
    group by tower) 
inner join np_capacity as b on a.tower  = b.tower 
group by a.id, a.tower, a.datetime 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM