簡體   English   中英

我如何 select 今天的最后一個條目 + 過去 6 天的數據

[英]How do I select last entry for today + last 6 days data

我如何 select 今天最近的最后一個條目 + 一天結束的最后 6 天數據僅每天一次

同一天有很多行,時間不同。

它應該只有 select 7 行數據。

+----+-----------------------+
| C1 |   C2                  |
+----+-----------------------+
|  1 |   2019-09-19 00:01:02 |
|  2 |   2019-09-19 00:05:02 |
|  3 |   2019-09-19 23:59:02 |
|  4 |   2019-09-20 00:15:02 |
|  5 |   2019-09-21 00:15:02 |
|  6 |   2019-09-22 00:15:02 |
|  7 |   2019-09-23 00:15:02 |
|  8 |   2019-09-24 00:15:02 |
|  9 |   2019-09-25 00:10:02 |
| 10 |   2019-09-25 00:12:02 |
+----+-----------------------+

此查詢將為您提供所需的結果。 它每天在子查詢中查找前 7 個最大 C2 值,然后將其加入原始表以獲取當天的值:

SELECT d1.*
FROM data d1
JOIN (SELECT DATE(C2) AS Day, MAX(C2) AS C2
      FROM data
      GROUP BY Day
      ORDER BY Day DESC
      LIMIT 7) d2 ON d2.C2 = d1.C2
ORDER BY Date(d1.C2)

Output(為了證明只得到 7 個結果,樣本稍大)

C1  C2
3   2019-09-19 23:59:02
4   2019-09-20 00:15:02
5   2019-09-21 00:15:02
6   2019-09-22 00:15:02
7   2019-09-23 00:15:02
8   2019-09-24 00:15:02
10  2019-09-25 00:12:02

dbfiddle 上的演示

如果您使用的是 MySQL 8+,我們可以使用ROW_NUMBER處理此問題:

WITH cte AS (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY DATE(C2) ORDER BY C2 DESC) rn
    FROM yourTable
    WHERE C2 >= CURDATE() - INTERVAL 6 DAY
)

SELECT C1, C2
FROM cte
WHERE rn = 1;

在此處輸入圖像描述

演示

我會使用 GROUP BY 來挑選每一天,所以:

SELECT *
FROM data
WHERE C2 IN (
     SELECT max(C2)
     FROM data
     WHERE C2 > curdate() - interval 3 day
     GROUP BY date(C2)
     )
ORDER BY C2

我總是喜歡在查詢條件(如“WHERE C2”)中使用列的“原始”值,因為這很容易使數據庫能夠在它決定需要的地方使用索引。

小提琴: https://www.db-fiddle.com/f/Bh2EU5bcQvmJfyCZqExmS/1

一種方法是:

select t.*
from t
where t.c2 = (select min(t2.c2)
              from t t2
              where t2.c2 >= date(t.c1) and
                    t2.c2 < date(t.c1) + interval 1 day
             )
order by date desc
limit 7

暫無
暫無

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

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