0

次の要素があるとしましょう。

アクションテーブル

id          type        date
----------- ----------  ----------
1           start       2012-01-01 10:00:00
2           suspend     2012-01-01 11:00:00
3           resume      2012-01-01 12:00:00
4           suspend     2012-01-01 13:00:00
5           resume      2012-01-01 14:00:00
6           stop        2012-01-01 15:00:00
7           refill      2012-01-01 16:00:00
8           stop        2012-01-01 17:00:00

関連付けテーブル

id    actionID    elementID
----- ----------- -----------
1     1           1
2     2           1
3     3           1
4     4           1
5     5           1
6     6           1
7     7           1
8     8           1

元素表

id    name
----- -----------
1     my element

つまり、基本的に私は要素を持っており、そのステータスはいくつかのユーザートリガーアクション(アクションテーブル)に従って進化し、それらのアクションは多くの要素を介して共有できます(それが私が関連付けテーブルを持っている理由です)。

SQLクエリで取得したいもの:

ElementID、開始アクションID、最後のアクションID(開始アクションは常に要素にリンクされます)

複数のSQLクエリを記述せずに可能ですか?何百万ものエントリがあるテーブル(関連付けテーブルとアクションテーブル)で実行されるため、最もパフォーマンスの高いクエリを探しています。

ありがとう

4

2 に答える 2

2
select last.elementID, start.actionID as startAction, last.actionID as lastAction
from (
    select elementID, max(actionID) as actionID
    from Association
    group by elementID
    ) last
inner join (
    select elementID, min(actionID) as actionID
    from Association
    group by elementID
    ) start on start.elementID = last.elementID
于 2012-09-20T14:33:38.047 に答える
1
SELECT e.Id, e.name,
  MAX(CASE WHEN a.type = 'start' THEN a.actiondate END) AS 'StartAction',
  MAX(CASE WHEN a.type = 'stop' THEN a.actiondate END) AS 'ENDAction'
FROM @actions a 
INNER JOIN @association s ON a.Id = s.actionid
INNER JOIN @elements e ON s.id = e.Id
GROUP BY e.id, e.name
于 2012-09-20T14:25:21.337 に答える