[英]how can i get profit for today, last 7 days and last 30 days using laravel
[英]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
如果您使用的是 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”)中使用列的“原始”值,因為這很容易使數據庫能夠在它決定需要的地方使用索引。
一種方法是:
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.