2013-02-12 32 views
0

的得分表中所列數據的約當人們開始和一個大表完成任務,例如:分組的整體得分基於值的範圍和SQLite中

 
Person | Task | Date started | Date ended 
--------------------------------------------- 
A  Cleaning 20-FEB-2012 22-FEB-2012 
N  Dishes 20-FEB-2012 24-FEB-2012 
Z  Cleaning 21-FEB-2012 23-FEB-2012 

和分配的分數評分表2,3,4每個任務根據他們花多長時間才能做到這一點,如:

 
| Task | Days taken | Score 
--------------------------- 
Cleaning  2  2 
Cleaning  1.5  3 
Cleaning  1  4 
Dishes  3  2 
Dishes  2.5  3 
Dishes  2  4 

我怎麼可能會生成查詢這給每個人的綜合得分爲每個任務,例如:

 
Person | Task | Overall Score 
--------------------------------------------- 
A  Cleaning 3.1 
A  Dishes 2.7 
N  Cleaning 3.4 

該解決方案一直在巧妙地避開我,一些幫助將不勝感激!目前我正在使用SQLite。

+0

不要在提到任務ID的第一個表中有FK! – Akash 2013-02-12 03:06:02

+0

不,設計我正在使用的數據庫的人通常將字符串值(如Task的值)視爲他的FK而不是實際的ID。 – 2013-02-15 06:11:59

回答

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 
+0

太好了,謝謝。我意識到問題還有另外一個方面 - 分數實際上是範圍,即清潔任務<1天爲4分,1 <天<2分爲3分,> 2天爲分數2.當s.daysTaken不直接落在1,1.5,2上時,我看不出如何執行連接。 – 2013-02-15 06:10:51