mysql查询某段时间段中每一天的数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql查询某段时间段中每一天的数据相关的知识,希望对你有一定的参考价值。

比如 test表 时间表示为sumtime 要查询1号-20号每天18点到20点的数据

参考技术A SELECT * FROM test WHERE DATE_FORMAT(sumtime,'%Y-%m-%d')>='2014-08-01' AND DATE_FORMAT(sumtime,'%Y-%m-%d')<='2014-08-20' AND DATE_FORMAT(sumtime,'%H')>=18 AND DATE_FORMAT(sumtime,'%H')<=20 参考技术B SELECT * WHERE sumtime >1 AND sumtime <20 参考技术C select month,ifnull(sum(汇总字段),0) from 表 where 条件 group by month;
满意请采纳。

Laravel 获取数组中每一天的最新数组项

【中文标题】Laravel 获取数组中每一天的最新数组项【英文标题】:Laravel get most recent array item for each day in array 【发布时间】:2021-04-22 14:16:36 【问题描述】:

我正在尝试找出最佳方式(无论我是使用查询生成器还是原始 PHP 执行此操作),以根据给定日期的 created_at 时间戳获取最新的数组项,该数组包含许多天。

例如...

[
  [
    "name" => "John",
    "created_at" => "2021-01-17 23:00:00"
  ],
  [
    "name" => "Jane",
    "created_at" => "2021-01-17 20:00:00"
  ],
  [
    "name" => "Edward",
    "created_at" => "2021-01-16 19:00:00"
  ],
  [
    "name" => "Scott",
    "created_at" => "2021-01-16 17:00:00"
  ]
]

在上面我有两天,每天都有一个条目,我想每天获取最新的条目,例如:

[
  [
    "name" => "John",
    "created_at" => "2021-01-17 23:00:00"
  ],
  [
    "name" => "Edward",
    "created_at" => "2021-01-16 19:00:00"
  ]
]

我目前有一个查询可以获取两个日期之间的所有内容...

$events = GoogleAnalytics::where('event_category', $category)
                        ->where('event_action', $action)
                        ->whereDate('period_from', '>=', $from)
                        ->whereDate('period_to', '<=', $to)
                        ->orderBy('created_at', 'desc')
                        ->get();

【问题讨论】:

【参考方案1】:

使用 laravel 集合助手,您可以为每天的第一次排序集合选择最新记录,然后按天对您的集合进行分组,即分组标准,然后使用地图从每个组中选择第一个结果

$collection = $collection->sortByDesc('created_at');
$results = $collection->groupBy(function ($item, $key) 
    $date=  new DateTime($item['created_at']);
    return $date->format('Y-m-d');
);
$results = $results->map(function ($item, $key) 
    return $item[0];
);

结果集如下所示

Array
(
    [2021-01-17] => Array
        (
            [name] => John
            [created_at] => 2021-01-17 23:00:00
        )

    [2021-01-16] => Array
        (
            [name] => Edward
            [created_at] => 2021-01-16 19:00:00
        )

)

DEMO

或者另一个更短的版本是 group , map + sort

$results = $collection->groupBy(function ($item, $key) 
    $date=  new DateTime($item['created_at']);
    return $date->format('Y-m-d');
);
$results = $results->map(function ($item, $key) 
    return $item->sortByDesc('created_at')->first();
);

【讨论】:

@RyanHolton 小改进我已将 [0] 更改为 -&gt;first() 以从组集合中选择第一个项目【参考方案2】:

你可以使用

->groupBy(DB::raw('Date(created_at)'))

用于按日期分组,然后使用集合

【讨论】:

以上是关于mysql查询某段时间段中每一天的数据的主要内容,如果未能解决你的问题,请参考以下文章

MySQL - 计算一周中每一天但每个发件人的所有行

Laravel 获取数组中每一天的最新数组项

php使用mysql数据库,要查询一个时间段里面每一天的数据量,当天没有则显示0.时间段可能是几天或者几月

如何获取一周中每一天的密码?

oracle上个月某一天的数据

MySQL列出当前月的每一天