目前,我通过这种方式增加了一个月的时间:
DATE_ADD(date, INTERVAL 1 MONTH) AS pDate
我试图通过使用相同的日期范围按月比较两个值。所以我用日期+1个月创建了另一个自定义字段,当我使用它时...缺少31天。
6月30日+1个月= 7月31日,因为我使用的是自定义字段...它缺少日期为31的字段
编辑v1.0
我有一个数据库,一年,每天都有一次。
例如:
01012018
....
31012018
01022018
...
28022018
我需要比较两个时间段,为了解决此问题,我创建了一个自定义字段,该字段需要日期并加上+1个月,因此在Data Studio中(可以在任何平台上使用)可以将1月25日至30日与25日进行比较2月-30日,问题是当我在日期30012018上添加1个月时,它变成30022018(您所知道的不存在)
无论如何,我坚持这个想法,但是也许还有其他方法可以做到这一点?再次重复,我需要比较同一日期但不同月份的日期-1月15日-1月-20日与2月15日-2月20日,但还是出现30-31日的问题
答案 0 :(得分:0)
如果您要在下个月结束,请尝试以下方法
================ RESTART: C:\Users\dell\Desktop\p.e.t.a.r.py ================
Traceback (most recent call last):
File "C:\Users\dell\Desktop\p.e.t.a.r.py", line 6, in <module>
txt.grid(column = 0, row = 0, font=("Anurati Regular", 50))
File "C:\Users\dell\AppData\Local\Programs\Python\Python35-32\lib\tkinter\__init__.py", line 2082, in grid_configure
+ self._options(cnf, kw))
_tkinter.TclError: bad option "-font": must be -column, -columnspan, -in, -ipadx, -ipady, -padx, -pady, -row, -rowspan, or -sticky
>>>
另外,对于您来说-您可能要考虑比较星期几(而不是月份)-这样就避免了28/29和30/31问题
答案 1 :(得分:0)
我需要比较两个时间段...
不幸的是,您的问题仍然没有显示出您的用例究竟是什么-因此,下面是尝试根据我所看到的问题的概括来给您一个想法
在下面(对于BigQuery Standard SQL):
project.dataset.table
是您的真实表,其中包含您要比较的日期和指标。 days_range
和months_range
-允许您分别设置范围或天数和月数,而无需在主SELECT语句中进行任何更改#standardSQL
WITH days_range AS (
SELECT 15 start_day, 20 end_day
), months_range AS (
SELECT 1 start_month, 4 end_month
)
SELECT
CONCAT(CAST(MIN(day_date) AS STRING), ' - ', CAST(MAX(day_date) AS STRING)) interval_days,
SUM(metric) interval_metric
FROM `project.dataset.table`, days_range, months_range
WHERE EXTRACT(DAY FROM day_date) BETWEEN start_day AND end_day
AND EXTRACT(MONTH FROM day_date) BETWEEN start_month AND end_month
GROUP BY DATE_TRUNC(day_date, MONTH)
-- ORDER BY 1
要使用上述脚本,您可以使用以下脚本来模拟您的真实表,该脚本通过生成2018年的天数以及随机指标
#standardSQL
WITH `project.dataset.table` AS (
SELECT day_date, CAST(100 * RAND() AS INT64) metric
FROM UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2018-12-31')) day_date
), days_range AS (
SELECT 15 start_day, 20 end_day
), months_range AS (
SELECT 1 start_month, 4 end_month
)
SELECT
CONCAT(CAST(MIN(day_date) AS STRING), ' - ', CAST(MAX(day_date) AS STRING)) interval_days,
SUM(metric) interval_metric
FROM `project.dataset.table`, days_range, months_range
WHERE EXTRACT(DAY FROM day_date) BETWEEN start_day AND end_day
AND EXTRACT(MONTH FROM day_date) BETWEEN start_month AND end_month
GROUP BY DATE_TRUNC(day_date, MONTH)
ORDER BY 1
结果为
Row interval_days interval_metric
1 2018-01-15 - 2018-01-20 244
2 2018-02-15 - 2018-02-20 235
3 2018-03-15 - 2018-03-20 204
4 2018-04-15 - 2018-04-20 355
如果您想检查28-30-31天相同脚本的行为,请尝试以下操作
#standardSQL
WITH `project.dataset.table` AS (
SELECT day_date, CAST(100 * RAND() AS INT64) metric
FROM UNNEST(GENERATE_DATE_ARRAY('2018-01-01', '2018-12-31')) day_date
), days_range AS (
SELECT 25 start_day, 31 end_day
), months_range AS (
SELECT 1 start_month, 4 end_month
)
SELECT
CONCAT(CAST(MIN(day_date) AS STRING), ' - ', CAST(MAX(day_date) AS STRING)) interval_days,
SUM(metric) interval_metric
FROM `project.dataset.table`, days_range, months_range
WHERE EXTRACT(DAY FROM day_date) BETWEEN start_day AND end_day
AND EXTRACT(MONTH FROM day_date) BETWEEN start_month AND end_month
GROUP BY DATE_TRUNC(day_date, MONTH)
ORDER BY 1
有结果
Row interval_days interval_metric
1 2018-01-25 - 2018-01-31 364
2 2018-02-25 - 2018-02-28 227
3 2018-03-25 - 2018-03-31 311
4 2018-04-25 - 2018-04-30 308
希望这将帮助您前进