0

更新 #1:クエリを実行すると、左結合行で構文エラーが発生します (ただし、左結合内でクエリを実行すると、完全に機能します)

SELECT b1.company_id, ((sum(b1.credit)-sum(b1.debit)) as 'Balance'

FROM MyTable b1
JOIN CustomerInfoTable c on c.id = b1.company_id

#Filter for Clients of particular brand, package and active status
where c.brand_id = 2 and c.status = 2 and c.package_id = 3

LEFT JOIN
(
  SELECT b2.company_id, sum(b2.debit) as 'Current_Usage'
  FROM MyTable b2
  WHERE year(b2.timestamp) = '2012' and month(b2.timestamp) = '06'
  GROUP BY b2.company_id
)
b3 on b3.company_id = b1.company_id
group by b1.company_id;

元の投稿:

同じテーブルで借方と貸方を追跡します。テーブルには次のスキーマがあります。

| company_id | timestamp | credit | debit |
| 10 | MAY-25 | 100 | 000 |
| 11 | MAY-25 | 000 | 054 |
| 10 | MAY-28 | 000 | 040 |
| 12 | JUN-01 | 100 | 000 |
| 10 | JUN-25 | 150 | 000 |
| 10 | JUN-25 | 000 | 025 |

私の結果として、私は見たい:

| Grouped by: company_id | Balance* | Current_Usage (in June) |
| 10 | 185 | 25 |
| 12 | 100 | 0 |
| 11 | -54 | 0 |

残高: (sum(credit) - sum(debits))* で計算 - タイムスタンプは関係ありません
Current_Usage: sum(debits) で計算 - ただし、JUN の借方のみ。

問題: すぐに JUN タイムスタンプでフィルター処理すると、すべての時間の残高が計算されず、6 月のトランザクションの残高だけが計算されます。

月ごとの現在の使用量を計算する方法はありますが、テーブル内のすべてのトランザクションの残高は計算できます。私のコードでは、JUN の結果のみが現在の使用量の計算にフィルター処理されることを除いて、すべてが機能しています。

SELECT b.company_id, ((sum(b.credit)-sum(b.debit))/1024/1024/1024/1024) as 'BW_remaining', sum(b.debit/1024/1024/1024/1024/28*30) as 'Usage_per_month'

FROM mytable b

#How to filter this only for the current_usage calculation?
WHERE month(a.timestamp) = 'JUN' and a.credit = 0


#Group by company in order to sum all entries for balance
group by b.company_id
order by b.balance desc;
4

2 に答える 2

0

ここで必要になるのは、月に基づいてフィルタリングするサブクエリとの結合です。

SELECT T1.company_id, 
       ((sum(T1.credit)-sum(T1.debit))/1024/1024/1024/1024) as 'BW_remaining', 
       MAX(T3.DEBIT_PER_MONTH)
FROM MYTABLE T1
LEFT JOIN 
(
  SELECT T2.company_id, SUM(T2.debit) T3.DEBIT_PER_MONTH
  FROM MYTABLE T2
  WHERE month(T2.timestamp) = 'JUN'
  GROUP BY T2.company_id
)
T3 ON T1.company_id-T3.company_id
GROUP BY T1.company_id

クエリをテストしていません。ここで私が言いたいのは、既存のクエリに参加して1か月あたりの使用量を取得する方法です。

于 2012-06-29T05:02:52.430 に答える
0

わかりました、@Kshitijのおかげでうまくいきました。他の誰かが同じ問題に遭遇した場合、これが私が解決した方法です:

SELECT b1.company_id, ((sum(b1.credit)-sum(b1.debit)) as 'Balance',
  (
  SELECT sum(b2.debit)
  FROM MYTABLE b2
  WHERE b2.company_id = b1.company_id and year(b2.timestamp) = '2012' and month(b2.timestamp) = '06'
  GROUP BY b2.company_id
  ) AS 'Usage_June'

FROM MYTABLE b1

#Group by company in order to add sum of all zones the company is using
group by b1.company_id
order by Usage_June desc;
于 2012-06-29T17:02:39.973 に答える