0

我需要一个包含日期、用户名和该日期十二个 operation_id 之一的查询。例如

operations
"id";"name";
"1";"LASER CUTTING"
"2";"DEBURR"
"3";"MACHINING"
"4";"BENDING"
"5";"PEM"
"6";"WELDING"
"7";"PAINT PREPARATION"
"8";"PAINTING"
"9";"SILKSCREEN PREPARATION"
"10";"SILKSCREEN"
"11";"ASSEMBLY - PACKAGING"
"12";"LASER PREP";

和一个用户表

bob
jimmeh
jimbo

我在这些表之间进行了交叉连接以获得如下内容:

bob 1
bob 2
bob 3
bob 4
bob 5
bob 6
bob 7
bob 8
bob 9
bob 10
bob 11
bob 12
jimmeh 1
jimmeh 2
jimmeh 3
jimmeh 4
jimmeh 5
jimmeh 6
jimmeh 7
jimmeh 8
jimmeh 9
jimmeh 10
jimmeh 11
jimmeh 12
jimbo 1
jimbo 2
jimbo 3
jimbo 4
jimbo 5
jimbo 6
jimbo 7
jimbo 8
jimbo 9
jimbo 10
jimbo 11
jimbo 12

但我也想在 2011 年 1 月 1 日到现在之间的每一天交叉加入,这样我就可以使用这个查询来给我记录每个人每天的每个操作,这样我就可以把它放在一个数据透视表中,然后使用它为每个用户的每个操作驱动每周的报告。

到目前为止,我有一个简单的 select userid from db.users join operations where departmentid = 8

我试过这个:

select 
  userid, 
    first_name, 
    last_name,
    operations.id,
    operations.name
from 
  protocase.tblusers 
join
  operations
join
  select (BETWEEN "2011-01-01" and NOW())
where 
  departmentid = 8 and 
    protocase.tblusers.active = 1

类似于人们如何选择 (1,2,3) 或其他不是来自表格的东西,但我似乎无法弄清楚如何选择 1 月 1 日到现在之间的所有日期。这甚至可能吗?

4

2 回答 2

1

您可以像这样创建一个日期表http://www.techrepublic.com/blog/datacenter/simplify-sql-server-2005-queries-with-a-dates-table/326

编辑:添加存储过程来生成日期:

DROP PROCEDURE IF EXISTS datePopulate;
DELIMITER $$
CREATE PROCEDURE datePopulate( startDate datetime, numDays int)
BEGIN

declare currDate datetime default startDate;
declare i int default 1;

WHILE (i<=numDays) DO       

    INSERT INTO DateLookup(DateFull, fullYear, weekdayname) 
    VALUES(currDate, date_format(currDate, '%Y'), date_format(currDate, '%a'));
    SET i = i+1;
    SET currDate = DATE_ADD(currDate , INTERVAL 1 DAY);

END WHILE;

END $$
DELIMITER ;

创建过程后,可以像这样调用它:

CALL datePopulate('2011-01-01', 30);

这将从 2011-01-01 开始在表格中填充 30 天。

我没有在插入语句中添加所有列。通过使用此处的信息添加应该非常简单。

于 2011-07-07T15:51:42.130 回答
1

最简单的方法是有一个包含一年中所有日期的预定义表,最多 365 行。然后,您可以简单地在查询中使用该表,仅选择 2011-01-01 和 NOW() 之间的行。这也意味着您的查询将不得不通过不在每次运行时创建日期表来完成较小的工作。

只是另一个想法,虽然我不确定你是否需要这个。如果打算为每年创建一个日期表,例如在 2012 年,您想要一个类似的日期表,但所有日期都从 2012 年开始,那么您可以考虑只存储日期和月份而不存储年份。

希望这是有道理的。

于 2011-07-07T17:44:52.390 回答