SQL语言中按月查询

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL语言中按月查询相关的知识,希望对你有一定的参考价值。

用户输入年份,然后就可以显示那一年每个月的记录。
select * from pop where pdate>'2010-01-01 00:00:00.000' and pdate<'2010-01-31 23:59:59.999'
在这条语句上修改,查询2-12月的记录。
或者来个高手写一条可行的语句。

select * from pop where year(pdate)=年份 and month(pdate)>1 and month(pdate)<3 参考技术A select * from pop where month(pdate) between 2 and 12 参考技术B select * from pop where pdate like 'year%' and month(pdate) between 2 and 12 参考技术C 二楼的正确。

创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数

【中文标题】创建 PHP 数组,其中包含从 SQL 中按月提取的日期和订单数【英文标题】:Create PHP arrays with dates and number of orders extracted by month from SQL 【发布时间】:2013-12-17 14:54:18 【问题描述】:

我有一个名为“订单”的表,其中包含不同日期的多行。

我想构建一个包含每月订单数的图表,所以我需要查询一个如下所示的数组:

一月------- 3 2 月 ------- 1 三月------- 0 四月 ------- 8 ......

正如所见,即使没有订单,月份也会显示。

从那里,我需要将数组的数量加载到如下内容中:

$data1y=array(3,1,0,8...);

虽然我会有很多这样的月份:

$graph->xaxis->SetTickLabels(array('Jan','Feb','March','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec'));

我尝试了类似这样的 SQL,但没有运气:

SELECT COUNT(*) FROM orders GROUP BY month(date)

【问题讨论】:

SELECT COUNT(*) FROM orders GROUP BY month(date) ....结果是什么 这个问题解释了如何在 MS SQL 中做你想做的事情的概念:Include missing months in Group By query 创建一个将月份列为键的数组,然后使用 SQL 的结果填充值。 【参考方案1】:

您的查询应该是这样的:

SELECT DATE_FORMAT(`date`, '%Y%m') AS `Ym`, COUNT(*) AS `count`
FROM `orders`
GROUP BY `Ym`

demo

附言您可以使用 PHP 或 SQL (如this)填充缺失的月份。

【讨论】:

这个看起来很棒。我怎样才能只将计数分配给数组'$data1y=array()'? 我正在获取类似:“$orders = $ordersQuery->fetchAll(PDO::FETCH_ASSOC)” 数组 ( [0] => 数组 ( [Ym] => 十二月 [count] => 7 ) [1] => 数组 ( [Ym] => 十一月 [count] => 11 ) [2] => 数组 ( [Ym] => 十月 [count] => 9 ) [3] => 数组 ( [Ym] => 九月 [count] => 8 ) [4] => 数组 ( [Ym] => 八月 [count] => 9 ) [5] => 数组 ( [Ym] => 七月 [count] => 1 ) [6] => 数组 ( [Ym] => 五月 [count] => 2 ) [7] => 数组([Ym] => 四月 [count] => 1)) 那太好了,但我使用的是 PHP 5.2,所以不支持 DateTime::createFromFormat... @samyb8:然后像this example 一样创建 SQL 查询,这应该适用于 5.2。【参考方案2】:

使用如下查询后,您可以在 PHP 中完成所有操作:-

SELECT date FROM orders

如果在运行后,例如 PDOStatement::fetchAll(),您有一个名为 $dateArray 的数组,其中包含数据库中的日期,那么您可以执行以下操作:-

$countArray = ['Jan' => 0, 'Feb' => 0, 'Mar' => 0, 'Apr' => 0, 'May' => 0, 'Jun' => 0, 'Jul' => 0, 'Aug' => 0, 'Sep' => 0, 'Oct' => 0, 'Nov' => 0, 'Dec' => 0];
foreach($dateArray as $dateString)
    $date = new \DateTime($dateString);
    $countArray[$date->format('M')]++;

I have setup a working example here.

有关DateTime classes 和PDO 的更多信息,请参阅PHP 手册。

【讨论】:

以上是关于SQL语言中按月查询的主要内容,如果未能解决你的问题,请参考以下文章

如何在 presto SQL 中按月分组

如何在bigquery中按月/年汇总

sql按月查询语句

SQL中的聚合——如何加速查询

如何在 Jooq 中按月和年将毫秒翻译成日期和分组?

按月编写 SQL 查询