私はそれがより速くなるだろうかどうかわからないんだけど、あなたはJOINのベースのアプローチに打撃
SELECT CON1.package_id
FROM (SELECT DISTINCT package_id
FROM EXT
WHERE ITEM_PARAM_ATTR_NAME = 'Charge code'
AND ITEM_PARAM_ATTR_VALUE = 'WDATRM'
) CON1
INNER
JOIN (SELECT DISTINCT package_id
FROM EXT
WHERE ITEM_PARAM_ATTR_NAME = 'Charge code'
AND ITEM_PARAM_ATTR_VALUE = 'WDA4RM'
) CON2
ON CON1.package_id = CON2.package_id
INNER
JOIN (SELECT DISTINCT package_id
FROM EXT
WHERE Priority > 299
) CON3
ON CON1.package_id = CON3.package_id
INNER
JOIN (SELECT DISTINCT package_id
FROM EXT
WHERE ITEM_PARAM_ATTR_NAME = 'Rate table rate'
AND ITEM_PARAM_ATTR_VALUE = '0.00000953'
) CON4
ON CON1.package_id = CON4.package_id
INNER
JOIN (SELECT DISTINCT package_id
FROM EXT
WHERE ITEM_PARAM_ATTR_NAME = 'Usage category group'
AND ITEM_PARAM_ATTR_VALUE = 'H'
) CON5
ON CON1.package_id = CON5.package_id
EDIT与えることができる:最初のものは動作しなかったことを。多分INTERSECTSはそれが得られるほど良いです。この方が良ければ、私は驚くだろうが、おそらく。
SELECT DISTINCT package_id
FROM (SELECT MAX(CASE WHEN ITEM_PARAM_ATTR_NAME = 'Charge code'
AND ITEM_PARAM_ATTR_VALUE = 'WDATRM' THEN 1
ELSE 0
) OVER
(PARTITION BY package_id) CON1,
MAX(CASE WHEN ITEM_PARAM_ATTR_NAME = 'Charge code'
AND ITEM_PARAM_ATTR_VALUE = 'WDA4RM' THEN 1
ELSE 0
) OVER
(PARTITION BY package_id) CON2,
MAX(CASE WHEN Priority > 299 THEN 1
ELSE 0
) OVER
(PARTITION BY package_id) CON3,
MAX(CASE WHEN ITEM_PARAM_ATTR_NAME = 'Rate table rate'
AND ITEM_PARAM_ATTR_VALUE = '0.00000953' THEN 1
ELSE 0
) OVER
(PARTITION BY package_id) CON4,
MAX(CASE WHEN ITEM_PARAM_ATTR_NAME = 'Usage category group'
AND ITEM_PARAM_ATTR_VALUE = 'H' THEN 1
ELSE 0
) OVER
(PARTITION BY package_id) CON5,
CON1 + CON2 + CON3 + CON4 + CON5 AS ALLCON
FROM EXT
) TMP
WHERE ALLCON = 5;
は世界をEAVへようこそ。 – lad2025
どのDBMSを使用していますか? –
@YellowBedwetterそのOracle –