【问题标题】:How to get days where there are no counts [duplicate]如何获得没有计数的日子[重复]
【发布时间】:2012-08-23 07:22:36
【问题描述】:

可能重复:
What is the most straightforward way to pad empty dates in sql results (on either mysql or perl end)?

在 some_table 中创建的每条“记录”都有一个“日期”。

some_table:

-------------------------
id | record | my_date
-------------------------
1  | rec_a  | 2012-08-01
2  | rec_b  | 2012-08-02
3  | rec_c  | 2012-08-02
4  | rec_d  | 2012-08-04
5  | rec_e  | 2012-08-06
6  | rec_f  | 2012-08-06

我的查询:

start_date 和 end_date 来自输入

SELECT
    my_date, COUNT(my_date) AS _count
FROM
    some_table
WHERE
    my_date
BETWEEN
    start_date
AND
    end_date
GROUP BY
DAY (my_date)

数组:

while($result = mysql_fetch_assoc($my_query))
{
    $dataset[] = array($result['my_date'],intval($result['_count']));
}

json_encode($dataset);

这将使:

["2012-08-01",1]
["2012-08-02",2]
["2012-08-04",4]
["2012-08-06",6]

什么是最好的方法来获得没有这样的计数的日子?

["2012-08-01",1]
["2012-08-02",2]
["2012-08-03",0] <--
["2012-08-04",4]
["2012-08-05",0] <--
["2012-08-06",6]

【问题讨论】:

标签: php mysql


【解决方案1】:

可能最简单的方法是创建一个包含所有可能日期的表格。然后,您将从该表中选择并左连接到您现有的表。

这可能看起来很老套,但这是一种非常常见的模式,尤其是在数据仓库中。

【讨论】:

  • 所以我应该创建一个包含年或只有几天和几个月的表?如果我用年份创建,我必须为接下来的 X 年创建行......如果没有年份,那么有 366 天的闰年呢。你确定这是常见的模式吗?看起来很hacky。我已经看到了一些关于临时表的东西......我正在考虑使用输入的日期范围创建一个临时表,并将其与实际结果连接起来......
  • @Joao - 通常的模式是创建一个以完整日期为键的表。然后,您可以使用其他列,例如年、月、日、星期几等...任何您认为有用的列。是的,您将为接下来的 X 年创建行(可能通过脚本),这没什么大不了的。 100 年的数据只有 36,500 行,这对于数据库来说不算什么。
猜你喜欢
  • 1970-01-01
  • 2021-03-28
  • 2019-10-14
  • 1970-01-01
  • 2019-05-27
  • 2020-05-17
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多