問題タブ [gaps-and-islands]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
2055 参照

sql - 連続していない日付範囲をマークする

背景(入力)

Global Historical Climatology Networkは、気象測定値のコレクションで無効または誤ったデータにフラグを立てました。これらの要素を削除した後、連続した日付のセクションがなくなった一連のデータがあります。データは次のようになります。

問題(出力)

欠落しているデータを推定して (たとえば、他の年から平均することによって) 連続した範囲を提供することは可能ですが、システムを簡素化するために、月を埋める連続した日付範囲があるかどうかに基づいて、連続していないセグメントにフラグを立てたいと考えています。

1843 年にいくつかの測定が行われました。

質問

すべての測候所について、1 日以上欠落している月のすべての日をどのようにマークしますか?

ソースコード

データを選択するコードは次のようになります。

関連するアイデア

連続した日付で満たされたテーブルを生成し、それらを測定データの日付と比較します。

アップデート

この問題は、このセクションの SQL を使用して再現できます。

テーブル

テーブルは次のように作成されます。

データの生成

次の SQL は、テーブルにデータを挿入します ( id[int]、name [varchar]、date [date]、valid[boolean]):

~の値は、特定の日に測定を行った気象観測所の名前'A'を表します。'F'

ランダムな行を削除

次のようにいくつかの行を削除します。

試み #1

次の例では、月に 1 日以上欠落しているすべての日に対してvalidフラグを切り替えません。false

試み #2

次の SQL は、空の結果セットを生成します。

試み #3

次の SQL は、駅名と日付の可能な組み合わせをすべて生成します。

ただし、実際のデータには数百の測点があり、日付は 1800 年代半ばまでさかのぼるため、すべての測点のすべての日付のデカルトは大きすぎます。このようなアプローチは、十分な時間があればうまくいくかもしれません...もっと速い方法があるはずです。

試み #4

PostgreSQL にはウィンドウ関数があります。

postgres でウィンドウ関数を使用して特定の変更を選択する方法

ありがとうございました!

0 投票する
7 に答える
3912 参照

sql - 日時のテーブルから開始値と終了値のリストを取得します

現在、私はこのようにテーブルを構築しています

ご覧のとおり、特定のタイムスタンプを持つデバイスからいくつかの値が入力されています(列の種類は日時です)。

問題は、デバイスはいつでも開始および停止でき、データ内に開始または停止が発生したという直接的な情報がないことです。ただし、2つの行のタイムスタンプが5秒以内の場合は常に同じ測定値に属するため、指定されたタイムスタンプのリストから、開始と停止がいつ発生したかを簡単に判断できます。

今、私はこのデータから次のようなリストを取得したいと思います:

では、これをすばやく行う方法はありますか?私が考えることができるのは、ある種のカーソルを使用して、各日時のペアを手動で比較することだけです。しかし、各行の各値を検査する必要があるため、これは非常に遅くなると思います。

では、カーソルで機能しないより良いSQLソリューションはありますか?

アップデート

現在、私は与えられたすべての答えをテストしました。そして、読むことによって、それらはすべて見栄えがよく、いくつかの興味深いアプローチがありました。残念ながら、それらすべて(これまでのところ)は実際のデータで失敗しました。最大の問題はデータの量にあるようです(現在、それらはテーブル内の約350万のエントリです)。小さなサブセットに対してのみ特定のクエリを実行すると、期待される結果が得られますが、テーブル全体にクエリをロールすると、パフォーマンスが非常に悪くなります。

データをチャンク化して、データの一部のみをこれらの指定されたアルゴリズムの1つに渡して、この処理を実行できるかどうかをさらにテストして調べる必要があります。しかし、おそらくあなたの1人は、結果をもう少し速く取得するための別の賢いアイデアを持っています。

更新(構造に関する詳細情報)

さて、これらの情報も役立つかもしれません:現在、テーブルには約350万のエントリがあります。そして、ここに与えられた列タイプと表示があります:

  • _ID
    • int
    • 主キー
    • グループ化されたインデックス
    • 私の例ではこの列について言及していません。このクエリには必要ないためです。
  • デバイスID
    • int
    • nullではない
    • 索引
  • タイムスタンプ
    • 日付時刻
    • nullではない
    • 索引
  • 価値
    • 異なるタイプ(int、real、tinyint)のいくつかのインデックス付けされていない列
    • すべてnullにすることができます

たぶん、これは与えられた問題に対するあなたのすでに(または新しい)解決策を改善するのに役立ちます。

0 投票する
2 に答える
158 参照

sql - 正しいT-SQLクエリを見つけるのに助けが必要

これをどうやってやるのかよくわかりません。基本的に私はこのようなテーブルを持っています

これには基本的に、従業員が休日を要求する日が含まれます。これで、1日または複数日が許可されたら、このデータをフォームのテーブルにコピーする必要があります

したがって、基本的に上記のデータについては、次のようにします。

つまり、DateFromとDateToに連続した日が必要です。現在、whileループを使用せずにこれを行う方法がわかりません。これはSQLなので、非反復的なソリューションをお勧めします。

お知らせ下さい!!!

0 投票する
4 に答える
207 参照

sql - 重複した次の行を削除する

ユーザーのログインスタンプとログアウトスタンプのリストがあります。残念ながら、LOGINエントリの後にLOGOUTエントリが続くとは限りません。[event_date]で並べ替えたときに、前の行と同じ[event][user_id]
を持つ行を削除したいの ですが、これを行う方法について何か提案はありますか?

表の例

0 投票する
2 に答える
419 参照

sql - SQL グループの範囲値

ここで他のいくつかの質問/回答を見てきましたが、それらを私の問題に適用することはできません. キー列に基づいて複数のシーケンシャル ブレークを識別しようとしています。私が見つけたほとんどの例は、同じキー列のシーケンスで複数のブレークを処理していません。

0 投票する
5 に答える
13412 参照

mysql - MySQL:日付範囲の間に欠落している日付を見つける

mysqlクエリについてサポートが必要です。2011年1月1日から2011年4月30日までのデータを含むdbテーブルがあります。各日付のレコードがあるはずです。テーブルから欠落している日付があるかどうかを確認する必要があります。

たとえば、2011年2月2日にデータがないとします。その日付を見つけるにはどうすればよいですか?

reportdatetimeという列に日付が格納されています。日付は、2011-05-10 0:00:00の形式で保存されます。これは、2011年5月5日午前12:00:00です。

助言がありますか?

0 投票する
2 に答える
2538 参照

sql - Sql Server で隣接するレコードに同じ値を持つレコードを見つけるにはどうすればよいですか? (これの正しい用語は地域だと思います??)

同じ値を持つ隣接するレコードの開始時刻と終了時刻を見つけるには?

心拍数の読み取り値 (1 分あたりの拍数) と日時フィールドを含むテーブルがあります。(実際には、フィールドはheartrate_idheartrate、およびdatetimeです。) データは、心拍数と時間を 6 秒ごとに記録するデバイスによって生成されます。心拍数モニターが誤った測定値を示し、記録された 1 分あたりの心拍数が一定期間「固着」することがあります。スティックとは、1 分あたりの拍数の値が隣接する時間で同じになることを意味します。

基本的に、心拍数が同じであるすべてのレコード (例: 毎分 5 ビート、毎分 100 ビートなど) を見つける必要がありますが、隣接するレコードのみです。デバイスが 3 回の連続読み取り (または 100 回の連続読み取り) で毎分 25 ビートを記録する場合、これらのイベントを特定する必要があります。結果には、心拍数、心拍数の開始時刻、心拍数の終了時刻が含まれている必要があり、理想的には、結果は次のようになります。

私はいくつかの異なるアプローチを試しましたが、今のところ私は打ちのめしています。どんな助けでも大歓迎です!

0 投票する
1 に答える
159 参照

sql - 特定の基準の連続範囲のサイズを決定する方法は?

SQL Server 2008R2 に位置テーブルがあります (以下の定義)。

システムボックスにはポジションがあります。

X 個の空きポジションが残っているボックスを見つける必要があります。ただし、X 位置は連続している必要があります (左から右、上から下、つまり、PositionID の昇順)。

X 位置が空いているボックスを検索するクエリを作成するのは簡単です。現在、位置が連続しているかどうかを判断する問題があります。

TSQL ベースのソリューションに関する提案はありますか?

テーブル定義

編集

http://pastebin.com/V8DLiucN - 1 ボックスのサンプル位置を含むペーストビン リンク (サンプル データではすべての位置が空)

編集 2

「フリー」ポジションは、SampleID = null のポジションです。