簡體   English   中英

MySQL - 選擇過去7天的條目數

[英]MySQL - Select number of entries the last 7 days

這就是我的表格

-----------------------
  posts
----------------------
id
created_at
..
..

應該如何查詢MySQL查詢,以便獲得過去7天的條目數。 結果看起來應該是這樣的: ['Mon' => 234, 'Tues' => 12, ...]

你可以使用datediff

select count(*), extract(day from created_at) current_day
from posts
where datediff(now(), created_at) <= 7
group by current_day;

如果你想要其他一天的0值,那么你必須在生成最后七天的假表上使用左連接。

select count(posts.created_at) as nb_occurence, c.a as number_of_day
from
(select b.a
    from (select 1 a
                union all select 2 a
                union all select 3 a
                union all select 4 a
                union all select 5 a
                union all select 6 a
                union all select 7 a) b) c
left join posts on extract(day from posts.created_at) % 7 - c.a in (select extract(day from date_sub(created_at, INTERVAL 7 DAY)) % 7 from posts)
group by c.a;
SELECT COUNT(*)
FROM posts
WHERE created_at<xy
GROUP BY created_at
SELECT COUNT(*), DATE_FORMAT(created_at,'%a')
FROM posts
WHERE created_at <= NOW() AND created_at >= DATE_SUB(created_at, INTERVAL 7 DAY)
GROUP BY DATE_FORMAT(created_at,'%a')

要為工作日添加0,計數為null:

SELECT a.weekday, IFNULL(b.total,0) FROM 
(SELECT 'Mon' as weekday from dual union SELECT 'Tue' as weekday from dual union SELECT 'Wed' as weekday from dual union SELECT 'Thu' as weekday from dual union SELECT 'Fri' as weekday from dual union SELECT 'Sat' as weekday from dual union SELECT 'Sun' as weekday from dual) a
LEFT JOIN 
(SELECT COUNT(*) as total, DATE_FORMAT(created_at,'%a') as weekday
FROM posts
WHERE created_at <= NOW() AND created_at >= DATE_SUB(created_at, INTERVAL 7 DAY)
GROUP BY DATE_FORMAT(created_at,'%a')) b on a.weekday=b.weekday

暫無
暫無

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

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