我有2个表,即table1和table2。
我要实现的目标:
我想返回有关员工的当月信息
AND
当他们从表2创建帐户时,他们可能已经更改了今天的头寸,因此我想在某个时间点和当前位置同一行上捕获信息。
大学课程表
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
答案 0 :(得分:0)
如果要返回表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())
请提供示例输出以进一步说明。
答案 1 :(得分:0)
在这里您可以尝试以下查询。
选择TB1。名称,Acct_Cr_DT,位置,性别,Emp状态,FISCAL_MONTH_END_DATE 从表1 tb1 内连接表2 tb2 ON tb1.name = tb2.name DATEPART(YEAR,Acct_Cr_DT)= DATEPART(YEAR,FISCAL_MONTH_END_DATE)和DATEPART(MONTH,FISCAL_MONTH_END_DATE)='12'和DATEPART(DAY,FISCAL_MONTH_END_DATE)='29'
在创建帐户时以及在一年中的最后一天刷新记录时获取记录。
答案 2 :(得分:0)
应该可以使用出色的DB2 OLAP函数(也称为窗口函数)来解决这个问题。
以下代码使用子查询提取每个员工的第一位,并按月末财务记录进行排序。然后,外部查询将结果与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 |
NB:这是一个MySQL 8.0提琴,因为没有野生的DB2 db fiddlde ...
答案 3 :(得分:0)
我自己找到了答案。
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