获取过去记录的数据

get data for a record in the past

我有 2 个 table,table1 和 table2。

我想达到的目标:

我想return有关员工的当月信息

当他们从 table 2 创建帐户时。他们可能已经改变了他们今天的位置,所以我想在 同一行的某个时间点捕获信息.

大学课程table

Table 1
Name  Acct_Cr_DT
a1    12/1/2018
b1    1/4/2018
c1    5/6/2018

上个月 (12/29) 和当前月份数据 (1/29/2019)。假设数据在每个财政月的最后一天刷新。

Table 2
Name  position  gender  Emp status  FISCAL_MONTH_END_DATE
a1    Analyst   M       hourly      12/29/2018
b1    Intern    F       hourly      12/29/2018
c1    Director  F       hourly      12/29/2018
a1    Manager   M       hourly      1/29/2019
b1    Analyst   F       hourly      1/29/2019
c1    Director  F       hourly      1/29/2019

a1 在创建帐户时是一名分析师。 b1 在创建帐户时是一名实习生。

示例输出:在这些获得促销之前需要创建帐户时的信息。

Name  Acct_Cr_DT  position  gender  Emp status  FISCAL_MONTH_END_DATE
a1    12/1/2018   Analyst   M       hourly      1/29/2019
b1    1/4/2018    Intern    F       hourly      1/29/2019
c1    5/6/2018    Director  F       hourly      1/29/2019

如果您想 return table 1 的当前月份信息:

SELECT *
FROM YOUR_TABLE
WHERE MONTH(COLUMN_NAME) = MONTH(GETDATE())
AND YEAR(COLUMN_NAME) = YEAR(GETDATE())

但是,根据您的解释判断,您需要一个连接语句来捕获同一行 上某个时间点的当前信息。所以你可能需要这个:

SELECT *
FROM TABLE_1 a inner join TABLE_2 b on a.id=b.id
WHERE MONTH(COLUMN_NAME) = MONTH(GETDATE())
AND YEAR(COLUMN_NAME) = YEAR(GETDATE())

请提供样本输出以作进一步说明。

在这里你可以试试下面的查询。

SELECT TB1.name,Acct_Cr_DT,职位,性别,就业状况,FISCAL_MONTH_END_DATE 从表 1 tb1 INNER JOIN Table2 tb2 ON tb1.name=tb2.name WHERE DATEPART(YEAR,Acct_Cr_DT) = DATEPART(YEAR,FISCAL_MONTH_END_DATE) AND DATEPART(MONTH,FISCAL_MONTH_END_DATE)='12' AND DATEPART(DAY,FISCAL_MONTH_END_DATE)=' 29'

获取创建帐户时的记录以及刷新记录的年份的最后一天。

使用出色的 DB2 OLAP 函数(又名 window 函数)应该可以解决这个问题。

以下代码使用子查询提取每个员工的第一个位置,并按财务月末对记录进行排序。外部查询然后将结果与 table2 连接以获得员工雇用日期,并筛选与最近财政月末对应的记录。

SELECT 
    tx.name, tx.first_position, tx.gender, tx.emp_status, tx.fiscal_month_end_date, t1.acct_cr_dt
FROM (
    SELECT
        t2.*,
        FIRST_VALUE(t2.position) OVER(PARTITION BY t2.name ORDER BY fiscal_month_end_date) first_position,
        DENSE_RANK() OVER (ORDER BY t2.fiscal_month_end_date desc) rnk
    FROM table2 t2
  ) tx INNER JOIN table1 t1 ON t1.name = tx.name
 WHERE tx.rnk = 1;

在此 DB Fiddle demo 中,查询产生:

| name | first_position | gender | emp_status | fiscal_month_end_date | acct_cr_dt |
| ---- | -------------- | ------ | ---------- | --------------------- | ---------- |
| a1   | Analyst        | M      | hourly     | 2019-01-29            | 2018-12-01 |
| b1   | Intern         | F      | hourly     | 2019-01-29            | 2018-01-04 |
| c1   | Director       | F      | hourly     | 2019-01-29            | 2018-05-06 |

注意:这是一个 MySQL 8.0 fiddle,因为没有可用的 DB2 db fiddlde...

我自己找到了答案。

Basically you'll have to join on Name and make sure the "Acct Create DT" is 
<=FISCAL_MONTH_END_DATE" to get the info for point in time for that employee.

Now after that, create a sub-query with a LEFT JOIN on Table 2 and extract the current 
"FISCAL_MONTH_END_DATE" to return current month data