0

人々がいつタスクを開始して完了するかについてのデータの大きなテーブルを考えると、例えば:

人| タスク| 開始日| 終了日
---------------------------------------------
クリーニング2012年2月20日2012年2月22日
N料理2012年2月20日-2012年2月24日
Zクリーニング2012年2月21日2012年2月23日

スコアテーブルは、タスクの実行にかかる時間に基づいて、タスクごとに2、3、4のスコアを割り当てます。例:

| タスク| かかった日数| スコア
---------------------------
クリーニング22
クリーニング1.53
クリーニング14
料理32
料理2.53
料理24

各タスクの各人の全体的なスコアを与えるクエリを作成するにはどうすればよいですか。例:

人| タスク| 総合評点
---------------------------------------------
クリーニング3.1
料理2.7
Nクリーニング3.4

解決策は微妙に私を避けてきました、いくつかの援助をいただければ幸いです!現在SQLiteを使用しています。

4

1 に答える 1

0

あなたの定義は少し曖昧です。ただし、次のことが役立ちます。

select t.person, t.task, sum(s.score)
from tasks t left outer join
     score s
     on t.task = s.task and
        s.daysTaken = t.julianday(dateended) - t.julianday(datestarted)
group by t.person, t.task

範囲の処理はもう少し難しいです。間隔の両端を取得してから、結合を実行する必要があります。

select t.person, t.task, sum(s.score)
from tasks t left outer join
     (select s.*,
             (select min(days_taken) from score s2 where s2.person = s.person and s2.task = s.task and s2.days_taken > s.days_taken
             ) as nextDays_Taken
      from score s
     ) s
     on t.task = s.task and
        t.julianday(dateended) - t.julianday(datestarted) >= s.days_taken and
        t.julianday(dateended) - t.julianday(datestarted) < nextDays_Taken
group by t.person, t.task
于 2013-02-12T03:28:39.347 に答える