选择一周的5个日期

我有这张桌子,Lineas(id,日期,proyect_id,小时),我想选择一个星期的时间总和为一个星期。例如,我需要这个输出日期2013年1月1日和2013/05/01之间:选择一周的5个日期

Proyect | 01/01/2013 | 02/01/2013 | 03/01/2013 | 04/01/2013 | 05/01/2013 

Proyect1 | - | 5 | - | 4 | 4

Proyect2 | 4 | 2 | 8 | 4 | 2

Proyect3 | 4 | 1 | - | - | 2

这是表

Id | Proyect_id | date | hours 

1 | Proyect1 | 02/01/2013 | 5

2 | Proyect1 | 04/01/2013 | 4

3 | Proyect1 | 05/01/2013 | 4

4 | Proyect2 | 01/01/2013 | 4

5 | Proyect2 | 02/01/2013 | 2

6 | Proyect2 | 03/01/2013 | 8

7 | Proyect2 | 04/01/2013 | 4

8 | Proyect2 | 05/01/2013 | 2

9 | Proyect3 | 01/01/2013 | 4

10 | Proyect3 | 02/01/2013 | 1

11 | Proyect3 | 05/01/2013 | 2

任何帮助或线索中的数据?

在此先感谢

回答:

MySQL没有支点函数,因此您需要使用具有CASE表达式的集合函数来复制该功能。

如果你的价值观是已知的,那么你可以硬编码它们与此类似:

select Proyect_id, 

sum(case when date = '2013-01-01' then hours end) `2013-01-01`,

sum(case when date = '2013-02-01' then hours end) `2013-02-01`,

sum(case when date = '2013-03-01' then hours end) `2013-03-01`,

sum(case when date = '2013-04-01' then hours end) `2013-04-01`

from Lineas

group by Proyect_id

见SQL Fiddle with Demo

但是,如果值是未知的,那么你将要使用准备语句生成动态SQL:

SET @sql = NULL; 

SELECT

GROUP_CONCAT(DISTINCT

CONCAT(

'sum(case when date = ''',

date,

''' then hours else 0 end) AS `',

date, '`'

)

) INTO @sql

FROM Lineas;

SET @sql = CONCAT('SELECT Proyect_id, ', @sql, '

FROM Lineas

GROUP BY Proyect_id');

PREPARE stmt FROM @sql;

EXECUTE stmt;

DEALLOCATE PREPARE stmt;

见SQL Fiddle with Demo

两者都给出结果:

| PROYECT_ID | 2013-01-01 | 2013-02-01 | 2013-03-01 | 2013-04-01 | 

------------------------------------------------------------------

| Proyect1 | 0 | 5 | 0 | 4 |

| Proyect2 | 4 | 2 | 8 | 4 |

| Proyect3 | 4 | 1 | 0 | 0 |

回答:

你可以在MySQL中使用聚集做支点:

select proyect_id, 

sum(case when date = '01/01/2013' then hours end) as "01/01/2013",

. . .

from t

group by proyect_id

. . .手段等为列的其余部分。

以上是 选择一周的5个日期 的全部内容, 来源链接: utcz.com/qa/262668.html

回到顶部