簡體   English   中英

優化查詢-如何從日期時間列中選擇最高和最低行,按日期分組並返回數組

[英]Optimize query - How can I Select highest and lowest row, group by date from datetime column and return array

我是堆棧溢出的新手,想問一下您是否可以查看我的代碼並給我一些提示,以改進它並獲得所需的結果。

我從這樣的表開始:

Table `time`:

|id|datetime           |type|
|97|2019-01-16 17:22:41|7   |
|96|2019-01-16 16:25:36|5   |
|94|2019-01-16 08:35:01|2   |
|93|2019-01-16 07:45:28|1   |

..還有其他日子,使用相同的方案,但類型不同。

為了獲取唯一的日期,我使用以下查詢:

"SELECT DISTINCT date(date_format(datetime, '%Y-%m-%d')) as uniquedates, active FROM time WHERE active = 1"

之后,我使用得出的單日/日期來獲取最低/最高數據,如下所示:

if($count != 0)
{
    while($row = $statement->fetch()) 
    {
        $dates[] = $row['uniquedates'];
    }
}

foreach($dates as $date)
{
    $statement = $pdo->prepare("SELECT MIN(type) AS lowest, MAX(type) AS highest FROM time WHERE datetime LIKE '%$date%'");
    $result = $statement->execute();
    //error handling
    while($row = $statement->fetch()) 
    {
        echo $date ." -> ". $row['lowest'] ." +> ". $row['highest'] ."<br>";
    }
}

因此,我得到一個類似的結果:

2018-12-03 -> 1 +> 7
...
2018-12-13 -> 1 +> 7
2018-12-14 -> 5 +> 6
2018-12-17 -> 1 +> 7
...
2018-12-20 -> 1 +> 7
2018-12-24 -> 10 +> 11
2018-12-21 -> 8 +> 9
2019-01-07 -> 1 +> 7
2019-01-08 -> 1 +> 7
2019-01-11 -> 1 +> 7
2018-12-27 -> 10 +> 11
2018-12-28 -> 10 +> 11
2019-01-14 -> 1 +> 7
2019-01-15 -> 1 +> 7
2019-01-16 -> 1 +> 7
...

這顯示了日期以及鏈接的低/高值。

不幸的是,我無法從那里獲取datetime值,所以我被困在這里。

我想返回一個僅包含每天最低和最高行的日期時間的數組。

因此,從我的表格示例來看,第93和97行。

|id|datetime           |type|
|97|2019-01-16 17:22:41|7   |
|93|2019-01-16 07:45:28|1   |

我很確定,這樣做比我的嘗試要容易得多。 :)

感謝您抽出寶貴的時間閱讀我的第一篇文章。 任何提示/幫助/示例都受到高度贊賞!

問候亞歷克斯

如果您在循環中執行SQL查詢,那么通常所做的事情應該是SQL的一部分。

請嘗試以下操作:

SELECT date_format(datetime, '%Y-%m-%d') as d,
  MIN(type) AS lowest,
  MAX(type) AS highest
FROM time
WHERE active = 1
GROUP BY d

暫無
暫無

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

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