从 table 中提取具有多个要求的对

pull pairs from table with multiple requirements

我有一个包含多个员工以及他们工作了多少小时的数据库。请看下面。
因此,每个表示 Wellsite 的 Time.Type 都需要两行。一个用于属性:注册工作日,下一行显示属性:工作 ID。我的代码显示了所有具有 Job ID 的行,这是我需要删除的,除非它们上面有满足我条件的 Reg Work Day(见下文)。另外,我有一排上班时间类型很好,我没有遇到任何问题。

有人协助我完成这项工作,但只针对一名员工。现在我需要我的数据为多个员工完成这个过程。

我需要满足的条件是,当一行的 Time.Type 为 "Wellsite/Job/Vessel" 且属性为 "Regular Work Day" 时,"Hourly Value" 需要大于 15 .另外,我需要它正下方的行,该行的属性为 "Job ID",并且在 "value" 选项卡下也有工作编号。据我了解,日期列可用于将行保持在一起,但我只需要它为某些 employees/days 而不是所有内容工作。

下面的 table 显示了我所拥有的以及我想要它做的是在这个 table..

下面
CREATE TABLE mytable(
   Complete_Name              VARCHAR(9) NOT NULL PRIMARY KEY
  ,Day_of_Week                VARCHAR(7) NOT NULL
  ,Date                       VARCHAR(11) NOT NULL
  ,Time_Type                  VARCHAR(19) NOT NULL
  ,Attribute                  VARCHAR(16) NOT NULL
  ,Value                      VARCHAR(28) NOT NULL
  ,Hourly_value_in_decimals   NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',2.25);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeB','Tuesday','20-Oct-15','Wellsite/Job/Vessel','Job ID','2213840',NULL);

Table:

Complete_Name Day_of_Week Date        Time_Type           Attribute        Value                        Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA     Tuesday     20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA     Tuesday     20-Oct-2015 Wellsite/Job/Vessel Job ID           2213840                      NULL
EmployeeB     Tuesday     20-Oct-15   Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 2.25
EmployeeB     Tuesday     20-Oct-15   Wellsite/Job/Vessel Job ID           2213840                      NULL

我想看到的是...

CREATE TABLE mytable(
   Complete_Name              VARCHAR(9) NOT NULL PRIMARY KEY
  ,Day_of_Week                VARCHAR(7) NOT NULL
  ,Date                       VARCHAR(11) NOT NULL
  ,Time_Type                  VARCHAR(19) NOT NULL
  ,Attribute                  VARCHAR(16) NOT NULL
  ,Value                      VARCHAR(28) NOT NULL
  ,Hourly_value_in_decimals   NUMERIC(5,2)
);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Regular Work Day','RGWD - Regular Work Day (BR)',16.75);
INSERT INTO mytable(Complete_Name,Day_of_Week,Date,Time_Type,Attribute,Value,Hourly_value_in_decimals) VALUES ('EmployeeA','Tuesday','20-Oct-2015','Wellsite/Job/Vessel','Job ID','2213840',NULL);

Table:

Complete_Name Day_of_Week Date        Time_Type           Attribute        Value                        Hourly_value_in_decimals
------------- ----------- ----------- ------------------- ---------------- ---------------------------- ---------------------------------------
EmployeeA     Tuesday     20-Oct-2015 Wellsite/Job/Vessel Regular Work Day RGWD - Regular Work Day (BR) 16.75
EmployeeA     Tuesday     20-Oct-2015 Wellsite/Job/Vessel Job ID           2213840                      NULL

因此,在我之前的回答的基础上,您需要根据不同的标准为不同的员工拉人。

例如,名为 Hogan 的员工可能需要天数 > 15,而名为 NotHogan 的员工可能需要天数 > 24。

为此,您将条件放入 table(在下面的示例中,我动态构建了 table),然后加入 table 以获取日期和名称必填。

然后我加入这个结果得到最终的数据。

SELECT *
FROM ROSTER
JOIN (
  -- A list of dates and users we want to select
  SELECT `Date`, Name 
  FROM ROSTER 
  JOIN (
      -- Innermost table, our criteria, this can be an actual table in your db
      SELECT 'Hogan' as N, 15 as C 
         UNION ALL 
      SELECT 'NotHogan' as N, 24 as C 
  ) Criteria ON
      Criteria.N = ROSTER.Name AND 
      ROSTER.`Hourly Value` > Criteria.C AND  
      Attribute = 'Reg Work Day'
) sub ON ROSTER.`Date` = sub.`Date` and ROSTER.Name = Sub.Name