質問

時間の間のレコードを取得したいのですが、私が持っているのは、この弦のスニペットが期間を示すことだけです

9:00 AM - 10:00 AM

以下はテーブルスキーマです

CREATE TABLE [dbo].[Samples](
[RID] [int] IDENTITY(1,1) NOT NULL,
[PersonName[nvarchar](20) NOT NULL,
[NOT_AVL_DATE] [datetime] NULL,
[NOT_AVL_FOR] [int] NULL
)

簡単に:RIDは主要なキー、PersonNameは従業員/スタッフ/技術者名、NOT_AVL_DATEはスタッフが利用できないデータです。NOT_AVL_FORはスタッフが回避できない期間を表します。 1-休暇1日目 - 3日目の前半の休暇 - 1日後半に出発

要件: Timespanを考えると、その期間中に休暇中にいないスタッフが欲しいです。誰かが完全な声明を作成できますか?私の頭はこれについて考えて渦巻いています..助けてくれてありがとう

役に立ちましたか?

解決 2

おっとごめんなさい、私は多くの人が投稿を更新してくれたことをうれしく思っていました。簡単に言えば、0,1または2に推定されるフロントエンド[プレゼンテーションレイヤー]でAM / PMの場合、時間スパンをフィルタリングします。その後、データアクセスレイヤーでこれを行います。したがって、時間スロットに利用可能なスタッフに作業を割り当てられます。これはあなたの正確なニーズに合わないかもしれませんが、ほとんどの場合、フロントエンドはそうでない場合に複雑なクエリに答えることができます

他のヒント

DeepTechtons、私たちは本当にあなたの答えを見たいと思っていますが、あなたはまだそれを投稿していないので、それがどのように行われるかを紹介します。このSQLはSQL ServerではなくOracle用であるため、翻訳する必要があります。投稿にはない詳細がないため、使用されているいくつかの仮定は無効です。

with AllEmployees As 
   (select distinct PersonName from samples)
select * from AllEmployees 
minus
select PersonName from samples 
where trunc(not_avl_date) = trunc(sysdate) 
and (not_avl_for = 1
   or (not_avl_for = 2 and :timespan LIKE '%AM%')
   or (not_avl_for = 3 and :timespan LIKE '%PM%')
);

サンプルデータ:

create table samples (rid Number(3), PersonName Varchar2(20), 
   not_avl_date date, not_avl_for integer);

insert into samples values (1,'Peter',sysdate-2, 1);
insert into samples values (2,'Peter',sysdate-1, 2);
insert into samples values (3,'Paul',sysdate-1, 3);
insert into samples values (4,'Sue',sysdate, 3);
insert into samples values (5,'Bob',sysdate-2, 2);
insert into samples values (6,'Zach',sysdate+1, 1);
ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top