我有三個表:活動,動作(每個動作是一個活動的執行)和照片(每個動作都可以有附加的照片)。一個SQLite查詢中的兩個和三個表
現在我想要以降序檢索活動,並且對於每個活動我都希望花費在其上的總時間和附加的總照片。使用上次操作的停止時間計算的活動順序。
例如,對於以下數據
activities
------------------
_id | title
------------------
1 | Activity 1
2 | Activity 2
3 | Activity 3
4 | Activity 4
actions
-------------------------------------------------------------
_id | activity_id | date_started | date_stopped
-------------------------------------------------------------
1 | 1 | 2014-01-23 20:45:03 | 2014-01-23 20:45:24
2 | 2 | 2014-01-23 20:45:27 | 2014-01-23 20:45:29
3 | 3 | 2014-01-23 20:45:31 | 2014-01-23 20:45:43
4 | 1 | 2014-01-23 20:45:46 | 2014-01-23 20:45:48
5 | 4 | 2014-01-23 20:45:50 | 2014-01-23 20:46:19
photos
--------------------------------------------------------
_id | action_id | date_taken | path
--------------------------------------------------------
1 | 1 | 2014-01-23 20:45:11 | 758712034.jpg
2 | 1 | 2014-01-23 20:45:21 | 537444469.jpg
3 | 3 | 2014-01-23 20:45:39 | 28884579.jpg
4 | 5 | 2014-01-23 20:45:58 | 1519722792.jpg
5 | 5 | 2014-01-23 20:46:08 | 298808374.jpg
6 | 5 | 2014-01-23 20:46:15 | 2059925529.jpg
我希望能得到這個查詢所需數據:
SELECT
activityId, title, sum(seconds) AS totalSeconds, sum(cnt) AS totalPhotos
FROM
(
SELECT
activities._id AS activityId, activities.title AS title,
actions._id AS actionId,
strftime("%s", ifnull(actions.date_stopped, 'now')) -
strftime("%s", actions.date_started) AS seconds,
count(photos._id) AS cnt
FROM
activities JOIN actions ON activities._id = actions.activity_id
LEFT OUTER JOIN photos ON photos.action_id = actions._id
GROUP BY 1,2,3,4
ORDER BY actionId DESC
)
GROUP BY 1
但不幸的是,它提供了這樣的結果:
activityId | title | totalSeconds | totalPhotos
--------------------------------------------------------
1 | Activity 1 | 23 | 2
2 | Activity 2 | 2 | 0
3 | Activity 3 | 12 | 1
4 | Activity 4 | 29 | 3
我試圖得到這個(請參閱動作表中的activity_id
):
activityId | title | totalSeconds | totalPhotos
--------------------------------------------------------
4 | Activity 4 | 29 | 3
1 | Activity 1 | 23 | 2
3 | Activity 3 | 12 | 1
2 | Activity 2 | 2 | 0
如何更改我的查詢以獲得我想要的?
感謝您指出查詢中的問題。他們對我來說很合理。不幸的是,我認爲通過'Actions.totalSeconds'命令是錯誤的。它確實給出了測試數據的所需結果,但是一個行動或活動的持續時間與訂單無關。活動停止的時間是相關的(最後停止應該是結果中的第一個) – Bobrovsky
所以,你知道,這是你第一次給出排序應該是什麼;這就是爲什麼@Ondemannen和我給出了我們所做的答案。更新答案。 –
我確實說過「使用它的最後一個動作的停止時間來計算一個活動的順序」,但可能並不那麼明顯。無論如何,感謝您的更新,它解決了這個問題。你不僅解決了這個問題,而且給出了一些很好的建議。謝謝。 – Bobrovsky