タグ付けされた質問 「gaps-and-islands」

7
毎日のスケジュールを[開始日]にグループ化します。終了日]曜日のリストとの間隔
2つのシステム間でデータを変換する必要があります。 最初のシステムは、スケジュールを日付の単純なリストとして保存します。スケジュールに含まれる各日付は1行です。日付のシーケンスにはさまざまなギャップが存在する可能性があります(週末、祝日、長い一時停止、曜日によってはスケジュールから除外される場合があります)。週末も含めて、隙間はまったくありません。スケジュールは最大2年です。通常は数週間です。 次に、週末を除く2週間にわたるスケジュールの簡単な例を示します(以下のスクリプトにはさらに複雑な例があります)。 +----+------------+------------+---------+--------+ | ID | ContractID | dt | dowChar | dowInt | +----+------------+------------+---------+--------+ | 10 | 1 | 2016-05-02 | Mon | 2 | | 11 | 1 | 2016-05-03 | Tue | 3 | | 12 | 1 | 2016-05-04 | Wed | 4 | | …

6
表から「n」個の連続した無料番号を見つける
このような数字のテーブルがあります(ステータスはFREEまたはASSIGNEDです) id_set番号ステータス ----------------------- 1 000001割り当て済み 1 000002無料 1 000003割り当て済み 1 000004無料 1 000005無料 1 000006割り当て済み 10007割り当て済み 1 000008無料 1 000009無料 1 000010無料 1 000011割り当て済み 1 000012割り当て済み 1 000013割り当て済み 1 000014無料 1 000015割り当て済み 「n」個の連続した番号を見つける必要があるため、n = 3の場合、クエリは 1 000008無料 1 000009無料 1 000010無料 各id_setの最初の可能なグループのみを返す必要があります(実際、クエリごとにid_setに対してのみ実行されます) 私はWINDOW関数をチェックしてCOUNT(id_number) OVER (PARTITION BY id_set ROWS UNBOUNDED PRECEDING)いましたが、のようなクエリをいくつか試しましたが、それだけでした:) …

7
グループ化またはウィンドウ
ウィンドウ関数を使用して解決できると思う状況がありますが、よくわかりません。 次の表を想像してください CREATE TABLE tmp ( date timestamp, id_type integer ) ; INSERT INTO tmp ( date, id_type ) VALUES ( '2017-01-10 07:19:21.0', 3 ), ( '2017-01-10 07:19:22.0', 3 ), ( '2017-01-10 07:19:23.1', 3 ), ( '2017-01-10 07:19:24.1', 3 ), ( '2017-01-10 07:19:25.0', 3 ), ( '2017-01-10 07:19:26.0', 5 ), …

5
前の月末値に基づいて欠落データを入力する
次のデータが与えられた場合: create table #histories ( username varchar(10), account varchar(10), assigned date ); insert into #histories values ('PHIL','ACCOUNT1','2017-01-04'), ('PETER','ACCOUNT1','2017-01-15'), ('DAVE','ACCOUNT1','2017-03-04'), ('ANDY','ACCOUNT1','2017-05-06'), ('DAVE','ACCOUNT1','2017-05-07'), ('FRED','ACCOUNT1','2017-05-08'), ('JAMES','ACCOUNT1','2017-08-05'), ('DAVE','ACCOUNT2','2017-01-02'), ('PHIL','ACCOUNT2','2017-01-18'), ('JOSH','ACCOUNT2','2017-04-08'), ('JAMES','ACCOUNT2','2017-04-09'), ('DAVE','ACCOUNT2','2017-05-06'), ('PHIL','ACCOUNT2','2017-05-07') ; ...特定のユーザーがいつアカウントに割り当てられたかを表します。 毎月の最終日に特定のアカウントを誰が所有したかを確認しようとしています(割り当てられた日付はアカウントが所有権を譲渡した日付です)、不足している月末が入力されてdatesいます(利用可能な便利なテーブルから作成される可能性があります)有用な列を使用してDateKey、DateおよびLastDayOfMonth[[@AaronBertrandの提供])1。 望ましい結果は次のとおりです。 PETER, ACCOUNT1, 2017-01-31 PETER, ACCOUNT1, 2017-02-28 DAVE, ACCOUNT1, 2017-03-31 DAVE, ACCOUNT1, 2017-04-30 FRED, ACCOUNT1, 2017-05-31 FRED, ACCOUNT1, …

4
総訪問数を計算する
重複する日に注意して顧客の訪問数を計算するクエリを作成しようとしています。itemID 2009の開始日が23日、終了日が26日であるため、アイテム20010がこれらの日の間である場合、この購入日を合計カウントに追加しません。 シナリオ例: Item ID Start Date End Date Number of days Number of days Candidate for visit count 20009 2015-01-23 2015-01-26 4 4 20010 2015-01-24 2015-01-24 1 0 20011 2015-01-23 2015-01-26 4 0 20012 2015-01-23 2015-01-27 5 1 20013 2015-01-23 2015-01-27 5 0 20014 2015-01-29 2015-01-30 2 2 OutPutは7 …

2
最長連続シーケンスを選択
特定の列の連続する行の最長シーケンスを取得するPostgreSQL 9.0でクエリを作成しようとしています。 次の表を考慮してください。 lap_id (serial), lap_no (int), car_type (enum), race_id (int FK) どこlap_noがそれぞれに一意です(race_id, car_type)。 クエリで指定されたrace_idandの最長のシーケンスを生成car_typeしたいので、int最高の(または長い)を返します。 次のデータで: 1, 1, red, 1 2, 2, red, 1 3, 3, red, 1 4, 4, red, 1 5, 1, blue, 1 6, 5, red, 1 7, 2, blue, 1 8, 1, green, 1 car_type = …

4
ギャップとアイランド:クライアントソリューションとT-SQLクエリ
ギャップとアイランドのT-SQLソリューションは、クライアントで実行されているC#ソリューションよりも速く実行できますか? 具体的には、いくつかのテストデータを提供します。 CREATE TABLE dbo.Numbers ( n INT NOT NULL PRIMARY KEY ) ; GO INSERT INTO dbo.Numbers ( n ) VALUES ( 1 ) ; GO DECLARE @i INT ; SET @i = 0 ; WHILE @i < 21 BEGIN INSERT INTO dbo.Numbers ( n ) SELECT n + …

4
有効期限の異なる類似のレコードをマージするにはどうすればよいですか?
私が作業しているテーブルには、3つのコンポーネントがあります。 IDカラム(別のテーブルの主キー) 一部のデータ列 有効な日付from/ to列。 値: ID Data From To 1 a 2015-01-01 2015-01-05 1 a 2015-01-06 2015-01-10 1 b 2015-01-11 2015-01-15 1 a 2015-01-16 2015-01-20 2 c 2015-01-01 2015-01-05 2 c 2015-01-06 2015-01-10 テーブルは、一定の間隔で別のデータソースの「スナップショット」を取得し、有効期限をレコードに割り当てることによって更新されます。問題は、これらのスナップショットにより、その間隔中にまったく変更されなかった(有効期間が異なる)レコードの重複エントリが作成されることです。 連続した日付の行を探し、それらをマージして単一の有効期間を割り当てることにより、テーブルのサイズを小さくしたいと考えています。例えば: ID Data From To 1 a 2015-01-01 2015-01-10 1 b 2015-01-11 2015-01-15 1 a …

1
PostgreSQLでのシーケンスの圧縮
私が持っているid serial PRIMARY KEYPostgreSQLのテーブルの列を。id対応する行を削除したため、多くのが欠落しています。 ここで、シーケンスを再起動idし、元のid順序が維持されるようにs を再割り当てすることで、テーブルを「圧縮」したいと思います。出来ますか? 例: 今: id | data ----+------- 1 | hello 2 | world 4 | foo 5 | bar 後: id | data ----+------- 1 | hello 2 | world 3 | foo 4 | bar StackOverflowの回答で提案されたものを試しましたが、うまくいきませんでした: # alter sequence t_id_seq restart; ALTER SEQUENCE # …

2
指定された値から別の指定された値までの行を選択します
複数の列を含むテーブルがあり、列の値を確認したいのですが、別の列の値が表示されるまで、その列の値の後の行を選択します。私はを使用してみましたBETWEENが、列の値が整数の場合、整数間の数値のみを検索します。 たとえば、次のようなテーブルがあるとします。 id時間値 t1 12:00 PM 15 t1 12:02 PM 4 t1 12:03 PM 7 t1 12:05 PM 16 t5 12:10 PM 250 t5 12:15 PM 15 t8 11:00 AM 15 t8 3:00 PM 2 t8 3:05 PM 100 t2 7:00 PM 15 t2 7:01 PM 16 t15 5:00 AM …

3
Row_Numberを使用して連続した行数を見つける
信号の発生を表すintのこの列があり、連続する行の数を示す列を追加しようとしています 私のデータがこのように見える場合 724 727 728 733 735 737 743 747 749 連続する行数列を持つ結果のデータは次のようになります 724 1 727 1 728 2 729 3 735 1 737 1 743 1 744 2 748 1 ループ関数を使用してそれを実行しましたが、cteを使用して理解しようとしています。これが私の最新の試みのサンプルです DECLARE @d TABLE ( signal INT ) INSERT INTO @d SELECT 724 UNION SELECT 727 UNION SELECT 728 UNION …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.