我有2個表如下:
Table1:
ID Date
1 2022-01-01
2 2022-02-01
3 2022-02-05
Table2
ID Date Amount
1 2021-08-01 15
1 2022-02-10 15
2 2022-02-15 20
2 2021-01-01 15
2 2022-02-20 20
1 2022-03-01 15
我想選擇其中的行,Table2以便只選擇超過Datein的行,并按 ID 計算每個子集和每個 子集的數量總和。所以結果看起來像Table1Table2max(date)Table2grouped
ID Date Amount
1 2022-03-01 30
2 2022-02-20 40
SQL新手在這里...我嘗試了內部聯接,但無法傳遞日期過濾器...
嘗試查詢:
with table1 as (select * from table1)
,table2 as (select * from table2)
select * from table1 a
inner join table2 b on (a.id=b.id)
謝謝!
uj5u.com熱心網友回復:
就像 Paul 一樣,我會使用 JOIN 但我會將子句放在 ON 上,因此如果您加入更多表,SQL 優化器可以更清晰地查看每個表/連接的意圖是什么。我還會在表上使用別名并使用別名,因此不會混淆值的來源,這再次成為一種習慣,在撰寫更復雜的 SQL 或剪切粘貼到更大的代碼塊時會更輕松.
所以有一些 CTE 的資料:
WITH table1(id, date) AS (
SELECT * FROM VALUES
(1, '2022-01-01'),
(2 , '2022-02-01'),
(3 , '2022-02-05')
), table2(id, date, amount) AS (
SELECT * FROM VALUES
(1, '2021-08-01'::date, 15),
(1, '2022-02-10'::date, 15),
(2, '2022-02-15'::date, 20),
(2, '2021-01-01'::date, 15),
(2, '2022-02-20'::date, 20),
(1, '2022-03-01'::date, 15)
)
下面的 SQL:
SELECT a.id,
max(b.date) as max_date,
sum(b.amount) as sum_amount
FROM table1 AS a
JOIN table2 AS b
ON a.id = b.id AND a.date <= b.date
GROUP BY 1
ORDER BY 1;
| ID | MAX_DATE | SUM_AMOUNT |
|---|---|---|
| 1 | 2022-03-01 | 30 |
| 2 | 2022-02-20 | 40 |
uj5u.com熱心網友回復:
以下是我將如何使用 Snowflake 執行此操作:
--create the tables and load data
--table1
CREATE TABLE TABLE1 (ID NUMBER, DATE DATE);
INSERT INTO TABLE1 VALUES (1, '2022-01-01');
INSERT INTO TABLE1 VALUES (2 , '2022-02-01');
INSERT INTO TABLE1 VALUES (3 , '2022-02-05');
--table 2
CREATE TABLE TABLE2 (ID NUMBER, DATE DATE, AMOUNT NUMBER);
INSERT INTO TABLE2 VALUES(1, '2021-08-01', 15);
INSERT INTO TABLE2 VALUES(1, '2022-02-10', 15);
INSERT INTO TABLE2 VALUES(2, '2022-02-15', 20);
INSERT INTO TABLE2 VALUES(2, '2021-01-01', 15);
INSERT INTO TABLE2 VALUES(2, '2022-02-20', 20);
INSERT INTO TABLE2 VALUES(1, '2022-03-01', 15);
現在使用選擇獲取資料
SELECT TABLE1.ID, MAX(TABLE2.DATE), SUM(AMOUNT)
FROM TABLE1, TABLE2
WHERE TABLE1.ID = TABLE2.ID
AND TABLE1.DATE < TABLE2.DATE
GROUP BY TABLE1.ID
結果
| ID | 最大(表 2.日期) | 總和(金額) |
|---|---|---|
| 1 | 2022-03-01 | 30 |
| 2 | 2022-02-20 | 40 |
uj5u.com熱心網友回復:
個人不熟悉 Snowflake,但應該作業的標準 SQL 查詢是:
select id, Max(date) Date, Sum(Amount) Amount
from Table2 t2
where exists (
select * from Table1 t1
where t1.Id = t2.Id and t1.Date < t2.Date
)
group by Id;
請注意,由于您只需要來自 Table2 的資料,因此存在比內部聯接更可取,并且幾乎在所有情況下都比聯接具有更高的性能,最壞的情況是相同的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/474687.html
上一篇:生成隨機對SQL
下一篇:合并不同的資料集
