- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的环境是5.1.72-community。
我有一个名为“生产”的表,例如:
id, person_id, num, p_year, p_quarter
1, 1, 43, 2018, 2
2, 1, 92, 2018, 1
3, 1, 108, 2017, 4
4, 2, 41, 2018, 2
...
到“2018-04-14”时,我们知道季度=2,年份=2018。我定义quarter_1是当年的当前季度,quarter_2是上一季度,依此类推。现在我想创建一个像这样的 View :
person_id, num_quarter_1, num_quarter_2, num_quarter_3, num_quarter_4
1, 43, 92, 108, 0
2, 41, 0, 0, 0
这样,如果该季度没有num,则填0。
如何创建该 View ?
最佳答案
嗯。如果我将“最后四个季度”解释为“数据中的最后四个季度”,那么这是一种方法。
首先,您可以通过以下方式获得四个季度:
select distinct p_year, p_quarter
from production p
order by p_year desc, p_quarter desc
limit 4;
您可以使用变量枚举它们:
select p_year, p_quarter, (@rn := @rn + 1) as enum
from (select distinct p_year, p_quarter
from production p
order by p_year desc, p_quarter desc
limit 4
) p cross join
(select @rn := 0) params
然后,您可以在查询中使用它来透视数据:
select p.person_id,
sum(case when seqnum = 1 then num else 0 end) as num_quarter_1,
sum(case when seqnum = 2 then num else 0 end) as num_quarter_2,
sum(case when seqnum = 3 then num else 0 end) as num_quarter_3,
sum(case when seqnum = 4 then num else 0 end) as num_quarter_4
from production p join
(select p_year, p_quarter, (@rn := @rn + 1) as seqnum
from (select distinct p_year, p_quarter
from production p
order by p_year desc, p_quarter desc
limit 4
) p cross join
(select @rn := 0) params
) yq
using (p_year, p_quarter)
group by p.person_id;
编辑:
如果您根据当前季度定义季度,则可以执行类似的操作:
select p.person_id,
sum(case when seqnum = 1 then num else 0 end) as num_quarter_1,
sum(case when seqnum = 2 then num else 0 end) as num_quarter_2,
sum(case when seqnum = 3 then num else 0 end) as num_quarter_3,
sum(case when seqnum = 4 then num else 0 end) as num_quarter_4
from production p join
(select year(curdate()) as p_year, quarter(curdate()) as p_quarter, 1 as seqnum union all
select year(curdate() - interval 1 quarter) as p_year, month(curdate() - interval 1 quarter) as p_quarter, 2 as seqnum union all
select year(curdate() - interval 2 quarter) as p_year, month(curdate() - interval 2 quarter) as p_quarter, 3 as seqnum union all
select year(curdate() - interval 2 quarter) as p_year, month(curdate() - interval 3 quarter) as p_quarter, 4 as seqnum
) yq
using (p_year, p_quarter)
group by p.person_id;
还有其他方法,例如:
select person_id,
sum(case when year(curdate()) = p_year and quarter(curdate()) = p_quarter
then num else 0
end) as num_quarter_1,
sum(case when year(curdate() - interval 1 quarter) = p_year and quarter(curdate() - interval 1 quarter) = p_quarter
then num else 0
end) as num_quarter_2,
sum(case when year(curdate() - interval 2 quarter) = p_year and quarter(curdate() - interval 2 quarter) = p_quarter
then num else 0
end) as num_quarter_3,
sum(case when year(curdate() - interval 3 quarter) = p_year and quarter(curdate() - interval 3 quarter) = p_quarter
then num else 0
end) as num_quarter_4
from production p
group by person_id;
关于mysql - 如何创建显示过去 4 个季度数据的 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49831313/
我有以下数据框: Data <- data.frame( date = c("2001-01-01", "2001-02-01", "2001-03-01", "2001-04-01", "200
我在基于 [Date] 字段的选择查询中使用这些公式。学期为 1 月至 6 月 1 个学期,7 月至 12 月为 2 个学期。季度是 3 个月的版本(1 月至 3 月等为 1)。 case when
我有一些用户上传的数据,需要根据用户选择的时间段进行存储和排序。期间应该只支持月年或季度年,没有其他,类似于下面: +----+---------+-------+ | id | pe
我有一个 pandas DataFrame,其中有一列(标题)需要被解析为日期时间对象,以便我可以将其转换为时间序列。 Title Gross Domestic Product: Quar
oracle按天,周,月,季度,年查询排序 ? 1
我有 32 年的数据要放入分区表中。但是 BigQuery 说我超过了限制(4000 个分区)。 对于像这样的查询: CREATE TABLE `deleting.day_partition` PAR
我们将从以下数据表开始: id date 1: 1 2016-03-31 2: 1 2015-12-31 3: 1 2015-09-30 4: 1 2015-06-
我知道与计划相关的里程碑的年份和季度(例如“2010”和“4”),并且我想从中选择/创建一个日期时间。有许多巧妙的方法可以用特定日期的格式(“qq”)来识别季度,但不能反过来(或者有吗?)。这是使用
我需要获得给定日期的相应三个月(3 个月的时间段,即 1 月、2 月和 3 月的第一个三个月)。使用 c# System.DateTime 结构我没有设法找到我正在寻找的方法。所以我这样解决了: Da
我的数据集包含 48 周内每一天的信息。[我的数据集截图][1] 我希望创建一个名为“quarter”的新变量,将每一个week变量值=1-12的观测值标记为“a”,意思是“第一季度”;另外,将每个周
我正在寻找一个 java 库,当给出起始日期和截止日期时,它将返回最适用的日期列表(以周、月、季度或年为单位)。我已经手动完成了这项工作,我想知道这是否已经作为标准包的一部分实现和测试。 例子 给定
我想做两件事: 我想将 x 轴格式设置为四分之一。我的时间序列数据以季度为单位。例如,对于日期 2012-12-31 我希望它显示为 2012Q4,对于 2013-03-31 作为 2013Q1 ,对
我是一名优秀的程序员,十分优秀!