Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 基于轴承移动的查询-他们工作了多少班次?_Sql_Sql Server - Fatal编程技术网

Sql 基于轴承移动的查询-他们工作了多少班次?

Sql 基于轴承移动的查询-他们工作了多少班次?,sql,sql-server,Sql,Sql Server,我在一家制造业的同事轮班工作的公司工作。换档系统可能每个月都不同。所以这两个家伙可能只在晚上工作一周,但下个星期会早晚工作 现在我有了一个数据库,在那里我可以看到同事们每天都在制作什么。基本上,我只能看到轴承的运动。理论上,我现在可以说,在2017年4月27日,他们分三班工作,因为在今天早上6:00-2:00,下午2:00-10:00和晚上10:00-6:00之间,我们的轴承在移动。每小时有数百个轴承移动 我现在想做的是:我想知道这些人每个月工作多少班。所以最好的结果是,如果我能得到一个查询,它

我在一家制造业的同事轮班工作的公司工作。换档系统可能每个月都不同。所以这两个家伙可能只在晚上工作一周,但下个星期会早晚工作

现在我有了一个数据库,在那里我可以看到同事们每天都在制作什么。基本上,我只能看到轴承的运动。理论上,我现在可以说,在2017年4月27日,他们分三班工作,因为在今天早上6:00-2:00,下午2:00-10:00和晚上10:00-6:00之间,我们的轴承在移动。每小时有数百个轴承移动

我现在想做的是:我想知道这些人每个月工作多少班。所以最好的结果是,如果我能得到一个查询,它会给我一个月的编号和下一列这个月的班次数量

我猜查询必须检查一个月的每一天,检查每个可能的班次是否有条目,如果有,那么就数一个计数器或其他什么

表架构:

TABLE_NAME lb
COLUMN_NAME      DATA_TYPE
id               int
date_            datetime
time_            time
doc              varchar
pgroup           int
piece            varchar
amount           decimal
name1            varchar
name2            varchar
name3            varchar
storage_location int
bs               varchar
hash             varchar
inserted         datetime
edited           datetime
仅来自列ID、日期和时间的样本数据_

ID   date_                      time_
1   2017-02-06 00:00:00.000    10:05:34.0000000
2   2017-02-02 00:00:00.000    09:15:31.0000000
3   2017-02-02 00:00:00.000    16:19:12.0000000
4   2017-01-30 00:00:00.000    14:15:01.0000000
5   2017-01-30 00:00:00.000    21:35:10.0000000
6   2017-01-31 00:00:00.000    05:33:20.0000000
7   2017-01-31 00:00:00.000    05:36:07.0000000
8   2017-01-31 00:00:00.000    14:33:56.0000000
9   2017-01-30 00:00:00.000    06:25:25.0000000
10  2017-01-30 00:00:00.000    10:05:29.0000000
11  2017-01-30 00:00:00.000    15:25:26.0000000
12  2017-01-30 00:00:00.000    17:35:29.0000000
13  2017-01-30 00:00:00.000    21:05:26.0000000
14  2017-01-31 00:00:00.000    00:45:44.0000000
15  2017-01-30 00:00:00.000    08:15:25.0000000
16  2017-01-30 00:00:00.000    10:05:32.0000000
17  2017-01-30 00:00:00.000    15:25:29.0000000
18  2017-01-30 00:00:00.000    17:35:32.0000000
19  2017-01-30 00:00:00.000    21:05:30.0000000
20  2017-01-31 00:00:00.000    00:45:53.0000000
基于样本数据的输出:

month   shifts
2       3
1       4

这可能吗?

你可以试试这样的东西

SELECT monthday AS "month", COUNT(monthday) AS "shifts" FROM
  (SELECT date_trunc( 'month', date ) FROM
    (SELECT DISTINCT date FROM lb 
       WHERE '06:00:00'::time <= time AND time < '14:00:00'::time
     UNION ALL 
     SELECT DISTINCT date FROM lb 
       WHERE '14:00:00'::time <= time AND time < '22:00:00'::time
     UNION ALL 
     SELECT DISTINCT date FROM lb 
       WHERE '22:00:00'::time <= time AND time < '06:00:00'::time
    ) shiftdays
  ) monthdays (monthday) GROUP BY monthday;
由于手机的原因,我没有时间检查它的语法是否正确。 另外,这是PostgreSQL语法,请根据您的SQL方言进行调整

它是如何工作的? 此项选择第一个班次中的所有日期。每天只有一次不同

SELECT DISTINCT date FROM lb 
  WHERE '06:00:00'::time <= time AND time < '14:00:00'::time
其他班次也一样。 然后,这三个班次的日子就被扔进了同一个碗里。 如果你把同一天扔进两次,它也会在碗里丢两次;我不想说group,因为group在SQL中已经有了不同的含义


现在我们有了一年中所有可能的天数,或者至少表中所有的天数行。每天显示0显示表架构。。此外,样本数据和期望的输出都取决于表结构和一些数据。如何存储班次、日期时间和其他详细信息?系统必须有班次主数据,并且班次ID必须存储在考勤表中。因此,此查询很简单。添加了一些更多信息显示您是否确定班次?所有的员工都在同一时间登记入住和退房吗?不,这不重要。这些数据与员工的入住登记无关。我只需要一个计数器,它对一个月的每一天执行以下-->遍历该月的所有天,查找,如果至少有一个条目在早上6点到下午2点之间,则计数+1,如果至少有一个条目在下午2点到晚上10点之间,则计数+1,如果至少有一个条目在晚上10点到早上6点之间,然后数到+1。在一个月的每一天都这样做。打印月号和计数器。谢谢!将在本周后进行测试1谢谢!改变了它一点,它的工作像魅力!