在mysql中为一组行创建视图

时间:2015-02-13 16:23:12

标签: mysql sql

我有一个包含以下列的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结束",但没有完全发挥作用..

1 个答案:

答案 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放在其前面,将此语句放入视图中。