[英]How to use a subquery as a function paramter?
如果我想在 SQL 腳本中創建一個“用戶變量”,我通常會在頂部創建一個參數 WITH 語句,以便在運行腳本之前為腳本用戶提供一個更改變量的位置。 像這樣:
WITH parms AS (
select '2022-01-01' AS data_date
)
SELECT SUM(a.amount) AS total
FROM a
JOIN parms
ON 1=1
WHERE a.data_date BETWEEN
DATE_FORMAT(parms.data_date,'yyyy-MM-01') --BOM
AND
LAST_DAY(parms.data_date) --EOM
UNION ALL
{table b}
...
{table x}
UNION ALL
SELECT SUM(z.amount) AS total
FROM z
JOIN parms
ON 1=1
WHERE z.data_date BETWEEN
DATE_FORMAT(parms.data_date,'yyyy-MM-01') --BOM
AND
LAST_DAY(parms.data_date) --EOM
;
我的問題是我的表a
到z
每個都包含數億行,我認為parms on 1=1
肯定很昂貴。
我想消除每一行的join parms
,而是在WHERE
中選擇參數:
WHERE a.data_date BETWEEN
DATE_FORMAT((select parms.data_date from parms limit 1),'yyyy-MM-01') --BOM
AND
LAST_DAY(select parms.data_date from parms limit 1) --EOM
是否可以在函數參數中使用子查詢? 我是否采用正確的方法來加快速度?
如果必須,我可以回退到消除WITH parms
,而是在每個WHERE
語句中的整個腳本中添加日期。
編輯:忘記添加我僅限於單個 SQL 語句。 我不能在單獨的語句中聲明變量。
您可以聲明一個變量並在 where 子句中引用它。
DECLARE @data_date VARCHAR(8) = '22-01-01';
SELECT SUM(a.amount) AS total
FROM a
WHERE a.data_date BETWEEN
DATE_FORMAT(@data_date,'yyyy-MM-01') --BOM
AND
LAST_DAY(@data_date) --EOM
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.