我有一個帳號及其余額的時間序列資料庫。并非所有帳號都出現在每個日期。
例子:
| 日期 | 帳戶ID | 平衡 |
|---|---|---|
| 2021-01-01 | 1 | 10.0 |
| 2021-01-01 | 2 | 100.0 |
| 2021-01-01 | 3 | 78.0 |
| 2021-01-02 | 1 | 40.0 |
| 2021-01-02 | 2 | 200.0 |
| 2021-01-03 | 1 | 0.0 |
| 2021-01-04 | 1 | 0.0 |
| 2021-01-05 | 1 | 0.0 |
| 2021-01-06 | 1 | 7.0 |
| 2021-01-06 | 2 | 4.0 |
| 2021-01-06 | 3 | 0.0 |
如您所見,所有日期中僅顯示帳戶 ID 1。
我想要一個回傳該帳戶的 sql 查詢。
| 日期 | 帳戶ID | 平衡 |
|---|---|---|
| 2021-01-01 | 1 | 10.0 |
| 2021-01-02 | 1 | 40.0 |
| 2021-01-03 | 1 | 0.0 |
| 2021-01-04 | 1 | 0.0 |
| 2021-01-05 | 1 | 0.0 |
| 2021-01-06 | 1 | 7.0 |
這只是一個例子。它可以是多個帳戶,而不僅僅是一個。
編輯:
到目前為止,我所做的是使用 Python 生成此查詢,當數字日期增長時,這當然不是最佳的:
SELECT *
FROM table_name
WHERE account_id IN (
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-01'
INTERSECT
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-02'
INTERSECT
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-03'
INTERSECT
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-04'
INTERSECT
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-05'
INTERSECT
SELECT DISTINCT account_id FROM table_name WHERE date_prod = '2021-01-06'
)
uj5u.com熱心網友回復:
您希望將每個帳戶 ID 的唯一日期與整個表中的唯一日期進行比較。像這樣的東西應該作業。
SELECT table1.date1,
table1.account_id,
table1.balance
FROM table1
INNER JOIN (SELECT account_id,
COUNT(DISTINCT date1) AS distinct_dates
FROM table1
GROUP BY account_id) account_dates ON table1.account_id = account_dates.account_id,
(SELECT COUNT(DISTINCT date1) AS expected_dates FROM table1) entire_table
WHERE account_dates.distinct_dates = entire_table.expected_dates;
uj5u.com熱心網友回復:
假設列date_prod的型別是 DATE。
給定MAX(date_prod) - MIN(date_prod) AS period_in_days .. WHERE account_id = x的是天數。每個帳戶的行數是COUNT(date_prod) .. WHERE account_id = x。
當每個帳戶的兩個數字都相等時,x您可以選擇每個日期(每日記錄)中存在的值或余額。
這取決于您的 DBMS,哪種 SQL 函式或查詢語法可以解決這個問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/421776.html
標籤:
