我有一个包含以下列的mysql表
1. id - int, auto increasing;
2. loc_id - int;
3. group_id - int;
4. target_date - int (epoch timestamp for each date at 00:00);
5. required - int;
6. actual - int;
7. updated_on;
表中的记录将插入块中,其中插入的行数等于组的数量(由group_id引用)。组的数量是3,即每个事务将插入3行:
loc_id + target_date + updated_on对于3行中的每一行都是相同的;
每行的group_id为1到3; 必需和实际将针对每一行。
我的问题是:如何创建一个视图,以便每个3行的块在表格中表示为一行,其列如下:
1. loc_id,
2. target_date,
3. required_for_group1,
4. actual_for_group1,
5. required_for_group2,
6. actual_for_group2,
7. required_for_group3,
8. actual_for_group3
9. updated_on
非常感谢您的帮助!
根据上面的例子,如果截止点是每个target_date的03:00 AM(在00:00总是epoch),则可以找到每个loc_id / target_date的最新记录?像一个额外的专栏,说"最新"对于条目"最近"到(target_date + 10800)。我尝试添加一个列"大小写时((target_date + 10800)-updated_on)然后"最新"否则0结束",但没有完全发挥作用..
答案 0 :(得分:2)
您可以使用条件聚合获得所需的结果:
select loc_id, target_date,
max(case when group_id = 1 then required end) as required_1,
max(case when group_id = 1 then actual end) as actual_1,
max(case when group_id = 2 then required end) as required_2,
max(case when group_id = 2 then actual end) as actual_2,
max(case when group_id = 3 then required end) as required_3,
max(case when group_id = 3 then actual end) as actual_3,
updated_on
from table t
group by loc_id, target_date, updated_on;
您可以将create view <viewname> as
放在其前面,将此语句放入视图中。