Microsoft SQL Server 2008 R2で作業しています。SQL:最大値が1列以上のときに行を取得する方法
私はテーブルが従業員という名前があります:私は資格という名前のテーブルを持っている
create table employee (
employee_id bigint not null primary key,
first_name varchar(50) not null,
middle_name varchar(50) null,
last_name varchar(50) not null
)
を。それにはFKから従業員のテーブルがあります。これは、employee_id + effective_date + sequence_numberという3つの列で構成される一意のキーを持ちます。
insert into eligibility (eligibility_id, employee_id, effective_date, sequence_number, value) values (1, 1001, '2016-04-13', 1, 'NS')
insert into eligibility (eligibility_id, employee_id, effective_date, sequence_number, value) values (2, 1001, '2016-05-25', 1, 'EX')
insert into eligibility (eligibility_id, employee_id, effective_date, sequence_number, value) values (3, 1001, '2016-05-25', 2, 'VR')
insert into eligibility (eligibility_id, employee_id, effective_date, sequence_number, value) values (4, 1001, '2016-06-05', 1, 'LS')
より:
insert into employee (employee_id, first_name, middle_name, last_name) values (1001, 'A', 'B', 'C')
私は同じEMPLOYEE_IDため適格表の4行を有する:
create table eligibility (
eligibility_id bigint not null primary key,
employee_id bigint not null foreign key references employee (employee_id),
effective_date date not null,
sequence_number int not null,
value varchar(20) not null,
constraint UK_eligibility unique (employee_id, effective_date, sequence_number)
)
IはEMPLOYEE_IDと1行の従業員テーブル= 1001を有します資格テーブル、与えられた日付のために私は最大(有効な日付+シーケンス番号)の行を取得したいc指定された日付よりも小さいか同じである。
例: 2016-04-30
日のために私は私がeligibility_idを持つ行を望むeligibility_id 2016-06-30
日のために= 3
で行をしたいと思う2016-05-30
日のために= 1 eligibility_idを持つ行を望みます= 4.
私は希望の結果を得るためにクエリを書いています。
select * from eligibility e
where
e.effective_date = (select max(e1.effective_date)
from eligibility e1
where e1.employee_id = e.employee_id and
e1.effective_date <= '2016-05-30') AND
e.sequence_number = (select max(e2.sequence_number)
from eligibility e2
where e2.employee_id = e.employee_id and
e2.effective_date = e.effective_date)
クエリはOKですが、私は同じ結果を得るために、いくつかの異なる方法でそれを書く試してみたい:これは2016-05-30
日付のクエリです。あなたがお勧めする他の方法は何ですか?
を? 「同じ結果を得るためのいくつかの異なる方法」は、無限に多くの可能性を提供します。 –
@JohnBollinger私は2回好きではないwhere句で適格性テーブルを使用しています – srh