私は2つのテーブルを持っていinvoices
ますdeposits
.
それらは次のように見えます。
請求書
id | paymentType | grossTotal | dateTime
1 | Cash | 1000 | UNIX TIME
2 | Card | 1350 | UNIX TIME
3 | Card | 1250 | UNIX TIME
4 | Card | 750 | UNIX TIME
預金
id | paymentType | invNo | dateTime | amount
1 | Cash | 1 | UNIX TIME | 150
2 | Card | 2 | UNIX TIME | 350
デポジットは常に過去の日付であり、請求書の日付はたとえば ですtoday
。そのため、請求書で今日支払われた残高を確認したいと考えていinvoices.grossTotal - deposits.amount
ます。
したがって、上記の表の例では、請求書 1 に 850 ポンド、請求書 2 に 1000 ポンドが支払われます。これは、それぞれの 1 行または 2 行で簡単に達成できますが、支払いタイプと預金請求書をグループ化すると行き詰まります。 ...
SELECT
invoices.id,
sum(grossTotal)-IFNULL(depositsCheck.previouslyPaid,0) as todayTotal,
depositsCheck.previouslyPaid, sum(grossTotal) as grossTotal
FROM `invoices`
LEFT JOIN (SELECT SUM(amount) as previouslyPaid, invNo
FROM deposits
GROUP BY invNo) depositsCheck ON depositsCheck.invNo=invoices.id
GROUP BY invoices.paymentType ORDER BY id DESC
上記の SQL クエリは、現金で支払われた商品には機能しますが、カードの支払いには機能しません。これは、グループ化はテーブルの列が正しくないことinvoices.paymentType
を意味するため、この行にデポジットが関連しないがある場合、 は失敗するためです。 .id
invoices
JOIN
id
上記のようにクエリを実行するにはどうすればよいですか?ただし、グループ化された列 ID レコードと一致する支払いタイプでグループ化された、請求書の任意のインスタンスのテーブルjoin
を確実に実行できますか?deposits
mySqlを使っているので、MySqlでできるjoinを投稿してください!:D