次の表では、ログイン日とユーザーセッションの期間を調べる必要があります。たとえば、3:25に同じ日にempid = 1がログインした(typeid = 1)と1/1/2009 @ 3:20にログオフし(typeid = 2)ログオフしました。出力は次のようになります。1つの列と2つの行によるグループ化
logged on, session length, sessionid
1/1/2009 3:20 5:00 014A3B2C-3874-4D84-A5B3-F234AA2AE30D
各セッションIDは一意です。このようなクエリを作成するにはどうすればよいですか?
create table a (empid int, typeid int, created datetime, sessionid nvarchar(36))
insert into a(empid, typeid, created, sessionid)
values(1, 1, '01/01/2009 3:20:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30D')
insert into a(empid, typeid, created, sessionid)
values(1, 2, '01/01/2009 3:25:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30D')
insert into a(empid, typeid, created, sessionid)
values(2, 1, '01/09/2009 4:20:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30E')
insert into a(empid, typeid, created, sessionid)
values(3, 1, '01/10/2009 3:25:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30F')
insert into a(empid, typeid, created, sessionid)
values(2, 2, '01/09/2009 4:23:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30E')
insert into a(empid, typeid, created, sessionid)
values(3, 2, '01/10/2009 4:25:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30F')
select * from a
drop table a
- EDIT - 私はフィルタリングしたいのですが、いくつかのシナリオがあります。一例として、EMPID = 1のため、その代わりに、このかもしれない:
insert into a(empid, typeid, created, sessionid)
values(1, 1, '01/01/2009 3:20:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30D')
insert into a(empid, typeid, created, sessionid)
values(1, 1, '01/01/2009 3:25:00', '014A3B2C-3874-4D84-A5B3-F234AA2AE30D')
上記EMPIDが整合型ID = 2を有していません。 2つのtypeid = 1があります。
セッションIDで自己結合を行う必要があります。 –
@DavidFaber - まったく必要ではない、単純な 'GROUP BY SessionId'で十分でしょう。 – Lamak