/ / SQLで2つの連続した行で検索するにはどうすればよいですか? -SQL、データベース、Peoplesoft

SQLで2つの連続する行を検索するにはどうすればよいですか? - SQL、データベース、Peoplesoft

SQLテーブルが与えられた場合

id     date       employee_type  employee_level
1   10/01/2015        other            2
1   09/13/2011      full-time          1
1   09/25/2010       intern            1
2   09/25/2013      full-time          3
2   09/25/2011      full-time          2
2   09/25/2008      full-time          1
3   09/23/2015      full-time          5
3   09/23/2013      full-time          4

employee_typeが「intern」の行と、employee_typeが「full-time」の表の上の行(後の日付の同じID)を持つIDを検索することは可能ですか?

この場合、ID 1は私の要件を満たしています。

どうもありがとう!

回答:

回答№1は2

前の日付と同じIDを意味すると仮定すると、使用できます lag()、ほとんどのデータベースでサポートされているANSI標準機能:

select t.*
from table t
where t.id in (select id
from (select t.*,
lag(employee_type) over (partition by id order by date) as prev_et
from table t
) tt
where tt.employee_type = "intern" and tt.prev_et = "full-time"
);

データベースがサポートしていない場合 lag()、相関サブクエリでも同様のことができます。


回答№2の場合は1

この質問は質問に記載されているとおりではありません。代わりに、あなたが望んでいると思われるのは、インターンだった人のすべての行をリストすることです。

SELECT
t1.*
FROM yourtable AS t1
INNER JOIN (
SELECT DISTINCT
id
FROM yourtable
WHERE employee_type = "intern"
) AS t2 ON t1.id = t2.id
;

あるいは、「インターン」と「フルタイム」の両方である人々のみが必要な場合があります。その場合、HAVING句を使用する以下のクエリを使用できます。

SELECT
t1.*
FROM yourtable AS t1
INNER JOIN (
SELECT id
FROM yourtable
WHERE employee_type = "intern"
OR employee_type = "full-time"
GROUP BY id
HAVING COUNT(DISTINCT employee_type) > 1
) AS t2 ON t1.id = t2.id
;