对于未订购日期

时间:2017-06-19 11:30:04

标签: mysql sql

我在mysql查询方面不是很好。这就是为什么要再问这个问题了。

我们正在使用 Mysql 数据库,我们有单个表 employee_transaction

employee_transaction表

id |  employee_id | date            | transaction_type
------------------------------------------------------
1  | 1            | 2015-01-01      | 1
2  | 1            | 2015-12-31      | 0 
3  | 1            | 2015-07-01      | 1
4  | 2            | 2014-02-01      | 1 
5  | 1            | 2016-04-01      | 1
6  | 2            | 2014-11-30      | 0
7  | 1            | 2016-08-01      | 1
8  | 1            | 2016-10-31      | 0 

等等。

要获得正确的结果,需要满足以下条件: -

  • 任何员工的第一个transaction_type始终为1。
  • 任何员工都不能连续执行transaction_type = 0。
  • 两个连续的transaction_type的结果如下 结果是一个员工

    1. 如果两个Transaction_type = 1。那么start_date =第一个交易日期, end_date =第二个交易日期-1和transaction_type = 1.

    2. 如果第一个Transaction_type = 1且下一个transaction_type = 0。那么 start_date =第一个交易日期,end_date =第二个交易日期 和transaction_type = 1。

    3. 如果第一个Transaction_type = 0且下一个transaction_type = 1。那么 start_date =第一个交易日期+ 1,end_date =第二个交易 date-1和transaction_type = 0。

    4. 如果在transaction_type = 0之后找不到任何交易。那么 start_date =第一个交易日期+ 1,end_date = Null和 TRANSACTION_TYPE = 0。

我们需要查询来自 employee_transaction 表的以下输出。

 employee_id |  start_date     | end_date       | transaction_type
------------------------------------------------------
 1            | 2015-01-01      | 2015-06-30     | 1
 1            | 2015-07-01      | 2015-12-31     | 1 
 1            | 2016-01-01      | 2016-03-31     | 0
 1            | 2016-04-01      | 2016-07-31     | 1
 1            | 2016-08-01      | 2016-10-31     | 1
 1            | 2016-11-01      | (Null)         | 0 
 2            | 2014-02-01      | 2014-11-30     | 1

提前致谢。

如果您有任何疑虑/需要澄清,请回复我。

0 个答案:

没有答案