0

以下のサンプル表に関して、次の定義に留意してください。

  • start、end、timestamp はすべて UNIX タイムスタンプです
  • 定義: 期間 = ((終了 - 開始)/3600)、つまり時間単位

次の mysql クエリを取得したいと思います。

  1. 学生ごとにグループ化し、各学生が費やしたすべての金額を計算します。つまり、(期間 x 費用)

これは私が手に入れたもので、動作しますが、不完全です!

SELECT 学生、SUM(ceil(cost*(end-start)/3600)) AS 費用
FROM は GROUP BY 学生をスケジュールします。

AND (これは機能しませんが、アイデアは実際に私が達成したいものです)

SELECT 学生, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHEREpaid = 1) AS 費用, SUM(SELECT ceil(cost*(end-start)/3600) FROM schedules WHEREpaid = 0) AS 負債 FROM スケジュール GROUP BY 学生;

私の最大の問題は、今日の日付が開始日よりも大きく、支払済みがまだ 0 に設定されている場合に、今日から過去までの費用と負債を計算することです。


皆さんのアイデアに感謝します!


サンプルテーブル

id meta_id 開始 終了 管理者 生徒 家庭教師 コース 費用 支払った 支払日 タイムスタンプ
18 4 1359867600 1359867690 jnc バンジューン キャメロン 2 90 1 1361521193 1359881165
19 4 1360472400 1360472490 jnc バンジューン キャメロン 2 90 1 1361521195 1359881165
20 4 1359867600 1359867690 jnc saadcore キャメロン 2 90 1 1361547064 1359881165
25 6 1359914400 1359919800 jnc ジョンドー・キャメロン 3 35 1 1361547080 1359893058
26 6 1360000800 1360006200 jnc ジョンドー・キャメロン 3 35 0 0 1359893058
27 6 1360087200 1360092600 jnc ジョンドー・キャメロン 3 35 0 0 1359893058
4

1 に答える 1

0

私は望ましい解決策を得ました

SELECT 
student, 
SUM(CASE WHEN paid = 1 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600) 
         ELSE 0 END) as expenses, 
SUM(CASE WHEN paid = 0 AND FROM_UNIXTIME(start) <= now() THEN ceil(cost*(end-start)/3600) 
         ELSE 0 END) as debts 
FROM schedules 
GROUP BY student;
于 2013-02-24T19:13:08.993 に答える