获取过去记录的数据
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
我有 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