我有 3 个数据表(都包含更多列,但这些是我需要的每个表):
t1:表1
工作ID1 | h1Amt | h1Dt | 地位 |
---|---|---|---|
101 | 73.00 | 12/1/2023 | A |
124 | 0.00 | 2023年10月30日 | D |
第251章 | 0.00 | 2023 年 3 月 1 日 | A |
255 | 24:00 | 11/30/2023 | A |
256 | 0.00 | 12/1/2023 | A |
t2:表2
工作ID2 | h2Amt | h2Dt | 类型1 |
---|---|---|---|
101 | 第0073章 | 202312 | 2 |
101 | 0000 | 202308 | 13 |
101 | 0000 | 202307 | 1 |
124 | 0000 | 202310 | 3 |
124 | 0000 | 202306 | 2 |
124 | 0000 | 202304 | 13 |
124 | 第0079章 | 202301 | 3 |
第251章 | 0000 | 202303 | 2 |
第251章 | 第1154章 | 202301 | 3 |
第251章 | 0000 | 202212 | 3 |
255 | 第0024章 | 202311 | 2 |
255 | 0000 | 202212 | 3 |
255 | 0000 | 202210 | 13 |
255 | 第0175章 | 202209 | 3 |
256 | 0000 | 202312 | 1 |
256 | 0000 | 202309 | 13 |
256 | 0000 | 202307 | 3 |
256 | 第0583章 | 202305 | 2 |
t3:表3
工作ID3 | h3Dt | 类型2 |
---|---|---|
101 | 12/1/2023 | 2 |
101 | 2023 年 8 月 13 日 | 13 |
101 | 2023 年 7 月 1 日 | 1 |
124 | 2023年10月1日 | 3 |
124 | 2023 年 6 月 1 日 | 2 |
124 | 2023 年 4 月 11 日 | 13 |
124 | 2023 年 1 月 1 日 | 3 |
第251章 | 2023 年 3 月 1 日 | 2 |
第251章 | 2023 年 1 月 1 日 | 3 |
第251章 | 2022年12月1日 | 3 |
255 | 11/1/2023 | 2 |
255 | 20022年12月1日 | 3 |
255 | 2022年10月7日 | 13 |
255 | 2022 年 9 月 1 日 | 3 |
256 | 12/1/2023 | 1 |
256 | 2023年9月5日 | 13 |
256 | 2023 年 7 月 1 日 | 3 |
256 | 2023 年 5 月 1 日 | 2 |
在 t1 中,每个 workID 只有一行,这是该 workID 的当前事务。随着数据的添加,所有 3 个表都会更新,其中 t1 仅显示当前事务。在 t2 和 t3 中,有多行,因为它显示每个 workID 的历史事务。
h1Amt 和 h2Amt 列显示相同的成本,但格式不同。此外,h1Dt、h2Dt 和 h3Dt 都反映相同的日期,只是格式不同。
我需要找到特定的当前值以及该值上次更改的时间。就我而言,我正在搜索 0.00 或 0000 的金额以及最后一次更改为该值的时间。此外,状态 (t1) 必须为“A”,类型(t2 或 t3)必须为 1、2 或 3。
这是我正在寻找的输出:
工作ID | 数量 | 日期 | 类型 |
---|---|---|---|
第251章 | 0.00 或 0000 | 202303 或 3/1/2023 | 2 |
256 | 0.00 或 0000 | 202307 或 7/1/2023 | 3 |
这是我到目前为止想到的,但它返回的金额当前不是 0000 (0.00),或者没有显示当前为 0000 (0.00) 的 workID。
select t2.workID2
,min(t2.h2Dt)
,min(t2.h2Amt)
from table2 t2
inner join table1 t1 on t2.workID = t1.workID
where not exists (
select 1
from table2
where workID2 = t2.workID2
and h2Amt <> t2.h2Amt
and h2Dt > t2.h2Dt
)
and t2.h2Amt = '0000'
and t1.status = 'A'
and t2.type1 in ('1','2','3')
group by t2.workID2
我没有使用table3,主要是因为table2包含需要的h2Amt。我认为使用 table1 中的 h1Amt 对我来说并不明智,因为它只显示当前的内容。由于状态列,我至少需要使用 table1 。如果我确实使用 table3,则 table1 将是一个要求,因为它是唯一具有状态列的表,但我认为我会遇到查找历史金额的问题,因为它没有记录在 table1 或 table3 中。另外,我遇到了在我尝试过的其他查询中获取重复行的问题,包括使用所有 3 个表。
上面是我在大量搜索类似情况后看到的最接近的查询。
希望我已经提供了足够的细节来找到解决方案。提前致谢!
您需要做的是将 table2 自身连接到它,并在更改为 0000 时过滤掉意义较小的金额,然后过滤日期以专门针对 workID 251 因为它的日期较低,所以不这样做在您的灵魂中使用 min 时显示正确。现在我们可以按最短日期对它们进行分组,然后将所有内容连接在一起并将最终过滤器应用于状态和类型。