工厂转移报告

Posted

技术标签:

【中文标题】工厂转移报告【英文标题】:Plant Shift Report 【发布时间】:2011-09-10 14:07:03 【问题描述】:

我正在生成:

在我的应用程序中,我提供了一个用于选择班次和工厂的下拉列表,他们将从日历中选择一个日期

我有 3 个班次

shift1 早上 7 点开始,下午 3 点结束 shift2 下午 3 点开始,晚上 11 点结束 shift3 晚上 11 点开始,凌晨 3 点结束

我有一个名为 datalogging 的表,其中将存储登录信息,如下所示:

Name       Shiftname    operatorname      Date           plantname      line       Machine 
Pradeepa   Shift2(11-7)  Operator 3     2011-05-28       Plant 3        Line5     mc10 
Ashwini   Shift1(7-3)    Operator 1     2011-05-29       Plant 3        Line6     mc12 
Deepika   Shift2(11-7)   Operator 3     2011-05-29       Plant 5        Line9     mc18 
Ashwini   Shift1(7-3)    Operator 1     2011-05-24       Plant 1        Line1     mc1 
Deepika   Shift2(3-11)   Operator 2     2011-05-24       Plant 2        Line3     mc5 
Ashwini   Shift2(3-11)   Operator 2     2011-05-25       Plant 2        Line3     mc5 

等等..

我有一个参数表,如温度、压力、ph、速度、co2 等

温度表包含以下数据,该表将包含从早上 7 点到凌晨 3 点的所有读数

这是温度表读数

Temperature      Time              Date 
27  1900-01-01 13:46:37.000 2011-06-07 00:00:00
27.3    1900-01-01 13:51:37.000 2011-06-07 00:00:00
27.6    1900-01-01 13:56:37.000 2011-06-07 00:00:00
27.9    1900-01-01 14:01:37.000 2011-06-07 00:00:00
28.2    1900-01-01 14:06:37.000 2011-06-07 00:00:00
28.5    1900-01-01 14:11:37.000 2011-06-07 00:00:00
28.8    1900-01-01 14:16:37.000 2011-06-07 00:00:00
27  1900-01-01 15:09:52.000 2011-06-07 00:00:00
27.3    1900-01-01 15:11:52.000 2011-06-07 00:00:00
27.6    1900-01-01 15:13:53.000 2011-06-07 00:00:00
27.9    1900-01-01 15:15:52.000 2011-06-07 00:00:00
28.2    1900-01-01 15:17:52.000 2011-06-07 00:00:00
28.5    1900-01-01 15:19:52.000 2011-06-07 00:00:00
28.8    1900-01-01 15:21:52.000 2011-06-07 00:00:00
29.1    1900-01-01 15:23:52.000 2011-06-07 00:00:00
29.4    1900-01-01 15:25:52.000 2011-06-07 00:00:00
29.7    1900-01-01 15:27:52.000 2011-06-07 00:00:00
30  1900-01-01 15:29:52.000 2011-06-07 00:00:00
30.3    1900-01-01 07:03:10.000 2011-06-07 00:00:00
30.6    1900-01-01 07:05:11.000 2011-06-07 00:00:00
30.9    1900-01-01 07:07:10.000 2011-06-07 00:00:00
31.2    1900-01-01 07:09:10.000 2011-06-07 00:00:00
31.5    1900-01-01 07:11:10.000 2011-06-07 00:00:00
31.8    1900-01-01 07:13:11.000 2011-06-07 00:00:00
31.8    1900-01-01 07:15:11.000 2011-06-07 00:00:00
32.1    1900-01-01 07:17:10.000 2011-06-07 00:00:00
32.4    1900-01-01 07:19:10.000 2011-06-07 00:00:00
32.7    1900-01-01 07:21:10.000 2011-06-07 00:00:00
33  1900-01-01 07:23:11.000 2011-06-07 00:00:00
27  1900-01-01 09:03:10.000 2011-06-07 00:00:00
27.3    1900-01-01 09:05:09.000 2011-06-07 00:00:00
27.6    1900-01-01 09:07:09.000 2011-06-07 00:00:00
27.9    1900-01-01 09:09:09.000 2011-06-07 00:00:00
28.2    1900-01-01 09:11:09.000 2011-06-07 00:00:00
28.5    1900-01-01 09:13:09.000 2011-06-07 00:00:00
28.8    1900-01-01 09:15:09.000 2011-06-07 00:00:00
29.1    1900-01-01 09:17:09.000 2011-06-07 00:00:00
29.4    1900-01-01 09:19:10.000 2011-06-07 00:00:00
29.4    1900-01-01 09:21:09.000 2011-06-07 00:00:00
29.7    1900-01-01 09:23:09.000 2011-06-07 00:00:00
30  1900-01-01 09:25:09.000 2011-06-07 00:00:00
30.3    1900-01-01 09:27:09.000 2011-06-07 00:00:00
27  1900-01-01 10:33:10.000 2011-06-07 00:00:00
27.3    1900-01-01 10:35:10.000 2011-06-07 00:00:00
27.6    1900-01-01 10:37:10.000 2011-06-07 00:00:00
27.9    1900-01-01 10:39:10.000 2011-06-07 00:00:00
28.2    1900-01-01 10:41:10.000 2011-06-07 00:00:00

这是我的压力读数

Pressure      Time                       Date
0.5 1900-01-01 13:46:36.000 2011-06-07 00:00:00
0.9 1900-01-01 13:51:36.000 2011-06-07 00:00:00
1.3 1900-01-01 13:56:36.000 2011-06-07 00:00:00
1.7 1900-01-01 14:01:36.000 2011-06-07 00:00:00
2.1 1900-01-01 14:06:36.000 2011-06-07 00:00:00
2.5 1900-01-01 14:11:36.000 2011-06-07 00:00:00
2.9 1900-01-01 14:16:36.000 2011-06-07 00:00:00
0.5 1900-01-01 15:09:52.000 2011-06-07 00:00:00
0.9 1900-01-01 15:11:51.000 2011-06-07 00:00:00
1.3 1900-01-01 15:13:52.000 2011-06-07 00:00:00
1.7 1900-01-01 15:15:52.000 2011-06-07 00:00:00
2.1 1900-01-01 15:17:51.000 2011-06-07 00:00:00
2.5 1900-01-01 15:19:51.000 2011-06-07 00:00:00
2.9 1900-01-01 15:21:51.000 2011-06-07 00:00:00
3.3 1900-01-01 15:23:51.000 2011-06-07 00:00:00
3.7 1900-01-01 15:25:51.000 2011-06-07 00:00:00
4.1 1900-01-01 15:27:51.000 2011-06-07 00:00:00
4.5 1900-01-01 15:29:51.000 2011-06-07 00:00:00
4.9 1900-01-01 07:03:09.000 2011-06-07 00:00:00
5.3 1900-01-01 07:05:09.000 2011-06-07 00:00:00
5.7 1900-01-01 07:07:09.000 2011-06-07 00:00:00
6.1 1900-01-01 07:09:09.000 2011-06-07 00:00:00
6.5 1900-01-01 07:11:09.000 2011-06-07 00:00:00
6.9 1900-01-01 07:13:09.000 2011-06-07 00:00:00
6.9 1900-01-01 07:15:09.000 2011-06-07 00:00:00
7.3 1900-01-01 07:17:09.000 2011-06-07 00:00:00
7.7 1900-01-01 07:19:09.000 2011-06-07 00:00:00
8.1 1900-01-01 07:21:09.000 2011-06-07 00:00:00
8.5 1900-01-01 07:23:09.000 2011-06-07 00:00:00
0.5 1900-01-01 09:03:09.000 2011-06-07 00:00:00
0.9 1900-01-01 09:05:09.000 2011-06-07 00:00:00
1.3 1900-01-01 09:07:09.000 2011-06-07 00:00:00
1.7 1900-01-01 09:09:09.000 2011-06-07 00:00:00
2.1 1900-01-01 09:11:09.000 2011-06-07 00:00:00
2.5 1900-01-01 09:13:09.000 2011-06-07 00:00:00
2.9 1900-01-01 09:15:09.000 2011-06-07 00:00:00
3.3 1900-01-01 09:17:09.000 2011-06-07 00:00:00
3.3 1900-01-01 09:19:09.000 2011-06-07 00:00:00
3.7 1900-01-01 09:21:09.000 2011-06-07 00:00:00
4.1 1900-01-01 09:23:09.000 2011-06-07 00:00:00
4.5 1900-01-01 09:25:09.000 2011-06-07 00:00:00
4.9 1900-01-01 09:27:09.000 2011-06-07 00:00:00
0.5 1900-01-01 10:33:10.000 2011-06-07 00:00:00
0.9 1900-01-01 10:35:10.000 2011-06-07 00:00:00
1.3 1900-01-01 10:37:10.000 2011-06-07 00:00:00
1.7 1900-01-01 10:39:10.000 2011-06-07 00:00:00
2.1 1900-01-01 10:41:10.000 2011-06-07 00:00:00
2.5 1900-01-01 17:02:57.000 2011-06-07 00:00:00
2.9 1900-01-01 17:04:57.000 2011-06-07 00:00:00
3.3 1900-01-01 17:06:57.000 2011-06-07 00:00:00
3.7 1900-01-01 17:08:57.000 2011-06-07 00:00:00
4.1 1900-01-01 17:10:57.000 2011-06-07 00:00:00
4.5 1900-01-01 17:12:57.000 2011-06-07 00:00:00
4.9 1900-01-01 17:14:57.000 2011-06-07 00:00:00

等等..

用户将从下拉列表和班次中选择一行,他将从日历中选择一个日期如果用户选择班次 1,工厂 1 和日期 07/06/2011 应该显示上午 7 点到下午 3 点之间的读数在我的报告中

我的报告应如下所示:

Machine     Shiftname   Date               Time             Temperature     Pressure
mc1         Shift1      2011/06/07      07:03:10.000          30.3           4.9
mc1         Shift1      2011/06/07      07:05:11.000          30.6           5.3
mc1         Shift1      2011/06/07      07:07:10.000          30.9           5.7  

像这样,我想要从晚上 7 点到下午 3 点从桌子上读取温度、压力、ph、co2、d02 的所有读数

谁能帮我解决这个问题。

【问题讨论】:

它抛出错误,因为无法绑定多部分标识符“P.Time”。 【参考方案1】:
Select 
  DL.Machine, 
  DL.ShiftName,
  @MyDate,
  case when T.Time is null then P.Time else T.Time end as Time,
  T.Temperature,
  NULL as Pressure
From
  DataLogging as DL
  inner join Temperature as T on "reading time is within this shift's timespan"
Where
  DL.Date = @MyDate
  and DL.ShiftName = @MyShiftName

UNION

Select 
  DL.Machine, 
  DL.ShiftName,
  @MyDate,
  case when T.Time is null then P.Time else T.Time end as Time,
  NULL as Temperature,
  P.Pressure
From
  DataLogging as DL
  inner join Pressure as P on "reading time is within this shift's timespan"
Where
  DL.Date = @MyDate
  and DL.ShiftName = @MyShiftName

让我在这里解释一下方法...

    从数据记录开始。您关心有特定轮班的员工。您可以通过指定输入 DATE 和输入 SHIFT 在 WHERE 子句中定义该员工。

    加入Temperature 表,因为您想查看该人轮班的所有温度读数。

    加入Pressure 表,因为您想查看该人轮班的所有压力读数。

    我们为什么要UNION?好吧,主要是为了防止欺骗(如果我们在同一个 Select 语句中加入两个读数表,就会存在欺骗)。正如您所注意到的,很难将温度读数和压力读数结合起来,因为它们具有不同的时间戳。如果他们相隔一秒钟,那么就没有什么可以加入的了。因此,我认为最好的解决方案是像我上面所做的那样简单地记录每次阅读。以上将首先列出所有温度读数,然后是所有压力读数 - 并将它们组合到通过 UNION 返回的同一个表中。

注意:您可能应该使用datetime 字段而不是Date 列和时间列,因为它将日期和时间都存储在一个字段中。

注意:您可以通过使用子查询和grouping 时间上的subquery 来组合具有相同日期和时间的读数。

注意:"reading time is within this shift's timespan" 包含在上面以指示您需要填写的一些代码。您可能希望使用case 语句来调整ON Clause 以仅包含这些项目有一个特定的转变

参考文献

Union

【讨论】:

没有我单独存储日期和时间,我根据班次获取数据。

以上是关于工厂转移报告的主要内容,如果未能解决你的问题,请参考以下文章

NOIP2009pj道路游戏[环形DP 转移优化 二维信息]

设计模式---工厂方法模式

简单工厂的使用(图书管理系统)

我的报告在 Eclipse 中正常工作,但使用 jar 文件抛出“没有为 'MongoDbQuery' 注册的查询执行器工厂”[重复]

假期德国实践报告 大众

设计模式之五:工厂方法模式(Factory Method)