我在Oracle DB中有如下SQL表:
我想从上表中得出以下观点:
我可以使用下面的查询生成视图的1行(在本例中为Item_id 'a')。
SELECT
Item_ID,
transaction_date as Latest_transaction
FROM
(
SELECT
*
FROM
TABLE
WHERE
Item_id LIKE '%a%'
ORDER BY
transaction_date DESC
)
WHERE
ROWNUM = 1
我想对数组['a','B','d','e','z' ]中的每个值执行以下查询,然后通过UNION将每行追加到视图中。但是,我不确定如何执行此操作,因为SQL不能执行FOR循环。
我已经尝试运行一个对每个ID都有一个联合的大型查询,但是在我的实际用例中,有太多的Item_ID(~4k),SQL无法执行此查询。
SELECT
Item_ID,
transaction_date as Latest_transaction
FROM
(
SELECT
*
FROM
TABLE
WHERE
Item_id LIKE '%a%'
ORDER BY
transaction_date DESC
)
WHERE
ROWNUM = 1
UNION
SELECT
Item_ID,
transaction_date as Latest_transaction
FROM
(
SELECT
*
FROM
TABLE
WHERE
Item_id LIKE '%b%'
ORDER BY
transaction_date DESC
)
WHERE
ROWNUM = 1
...con't for all IDs.
2条答案
按热度按时间sh7euo9m1#
osh3o9ms2#
您可以使用CTE和
regexp_substr
来完成此操作:regexp_substr
将允许您根据分隔符将字符串拆分为新行,然后我们将这些行作为最大值Transaction_date
。然而,这只会给予你
Item_ids
中的字符,因为我假设这就是你所说的“数组”。如果你能澄清g
结果来自哪里,我也可以在我的答案中包括它。