首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的sql查询最近7天的数据?如果数据不在那里,那么甚至获取日期,并显示为0或null

我的sql查询最近7天的数据?如果数据不在那里,那么甚至获取日期,并显示为0或null
EN

Stack Overflow用户
提问于 2013-03-08 15:48:22
回答 2查看 3.2K关注 0票数 1

我用sql Fidldle做了一个演示。我的表有以下列

代码语言:javascript
复制
displayId | displaytime | campaignId

现在我想要的是为特定的campaignId (我的意思是campaignId="")选择最近7天的条目,应该有多个条目具有相同的活动id..so,我想要显示它们的日期的总campaignId总和

因此,如果有7条日期为2013-3-8和其他日期的记录,则会显示如下记录

代码语言:javascript
复制
2013-03-02 | 1
2013-03-03 | 1
2013-03-04 | 0
2013-03-05 | 0
2013-03-06 | 0
2013-03-07 | 2
2013-03-08 | 7

在下面的查询中,它只显示了计数超过0的日期。例如,我尝试的是作为follows..but,它只给我一条在数据库中有条目的记录……

代码语言:javascript
复制
 2013-03-08 | 7


SELECT date(a.displayTime) AS `DisplayTime`,
       ifnull(l.TCount,0) AS TCount
FROM a_ad_display AS a
INNER JOIN
  (SELECT count(campaignId) AS TCount,
          displayTime
   FROM a_ad_display
   WHERE CONVERT_TZ(displaytime,'+00:00','-11:00') >= DATE_SUB(CONVERT_TZ(CURDATE(),'+00:00','-11:00') ,INTERVAL 1 DAY)
     AND CONVERT_TZ(displaytime,'+00:00','-11:00') <= CONVERT_TZ(CURDATE(),'+00:00','-11:00')
     AND campaignId = 20747
   GROUP BY DATE(displayTime)) AS l ON date(a.displayTime) = date(l.displayTime)
GROUP BY DATE(a.displayTime)
ORDER BY a.displaytime DESC LIMIT 7

我已经在我的查询中实现了时区,所以如果您可以帮助我处理这个简单的查询,那么它的ok..dont包含Convert_Tz行。

这是我的虚拟实体的http://sqlfiddle.com/#!2/96600c/1链接

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-08 16:16:27

如果您使用dates表,您的查询可以像下面这样简单:

代码语言:javascript
复制
select dates.fulldate, count(a_ad_display.id)
from dates
left outer join a_ad_display ON dates.fulldate = a_ad_display.displaytime
    [AND <other conditions here>]
where dates.fulldate BETWEEN date_add(curdate(), interval -6 day) AND curdate()
group by dates.fulldate

http://sqlfiddle.com/#!2/51e17/3

在不使用dates表的情况下,有一种方法。它很难看,可能对性能也很糟糕:

代码语言:javascript
复制
select displaytime, sum(c)
from
(
  select displaytime, count(a_ad_display.id) AS c
  from a_ad_display
  where displaytime BETWEEN date_add(curdate(), interval -6 day) AND curdate()
  group by displaytime
  union all
  select curdate(), 0
  union all
  select date_add(curdate(), interval -1 day), 0
  union all
  select date_add(curdate(), interval -2 day), 0
  union all
  select date_add(curdate(), interval -3 day), 0
  union all
  select date_add(curdate(), interval -4 day), 0
  union all
  select date_add(curdate(), interval -5 day), 0
  union all
  select date_add(curdate(), interval -6 day), 0
) x
group by displaytime
order by displaytime

http://sqlfiddle.com/#!2/96600c/16

票数 4
EN

Stack Overflow用户

发布于 2020-03-03 20:18:51

很简单!你可以用PHP来完成。首先创建日期数组,如下所示

代码语言:javascript
复制
date = date('Y-m-d'); $date1 = date('Y-m-d', strtotime('-1 days')); $date2 = date('Y-m-d', strtotime('-2 days'));$date3 = date('Y-m-d', strtotime('-3 days'));$date4 = date('Y-m-d', strtotime('-4 days'));$date5 = date('Y-m-d', strtotime('-5 days'));$date6 = date('Y-m-d', strtotime('-6 days')); 
                $dt_arr = array($date6,$date5,$date4,$date3,$date2,$date1,$date);

从今天开始的最后7天,使用foreach并在foreach中运行带有where date字段的查询,如下所示

代码语言:javascript
复制
 foreach ($dt_arr as $value) 
    {
     $qry = mysqli_fetch_array(mysqli_query($link,"select * from table where dt_field = $value"));
       if($qry['value'] == '')
         {
           $valfield = 0;
          $dtfiled = $value;

     }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15289123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档