問題タブ [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.
sql - 実際の開始日と終了日を維持しながら、同日のドロップ/追加を除外する
製品へのサブスクリプションのステータス更新を示す表があります。サブスクリプションの開始時にレコードがテーブルに挿入され、サブスクリプションの終了時にそのレコードが終了日で更新されます。私たちのシステムの 1 つ (どのシステムかはわかりません) は、サブスクリプションを終了してから再び開始する (新しいレコードを作成する) 「同日ドロップ/追加」を行うことがあります。そのため、実際には何も変更されていないにもかかわらず、同じ購読者 ID が複数のレコードに関連付けられます。
サンプルデータは次のとおりです。
この男は1/11に始まり、1/20に終わった。レコード 2 と 3 はシステムによって挿入されました (同日ドロップ追加ですが、実際にはそうではありませんでした)。レコード 4 は、19 さんが後で開始した別のサブスクリプションです。
各個別のサブスクリプションの最初の (実際の) レコードのみを解決しようとするコードがいくつかありますが、max() を使用してサブスクライバーごとにグループ化しないと、実際の終了日を見つけることができません。もちろん、1/11 - 1/31 と 1/30 - 1/31 の 2 つのサブスクリプションが表示されますが、これは誤りです。
このパターンを次のような 2 つのレコードに解決しようとして、私は頭を悩ませています。
これは Teradata にありますが、単なる ANSI SQL だと思います。
mysql - 日付範囲の累計 - 欠落している日付を入力してください
次の表があります。
毎月の合計を取得するにはどうすればよいですか? 次のような結果-
次のようなSQL文
0111 の場合は 800 になりますが...
注記日付の制限はありません。これは私のジレンマです。すべての日付に対してループを実行せずにこの列に入力し、欠落している月も表示するにはどうすればよいですか?
sql - T-SQLを使用して、基準を満たすシーケンシャル/連続レコードの最大/最大カウントを取得するにはどうすればよいですか?
簡単に言うと、Ticketmaster.com の "Find Best Available Seats" のようなコンサート タイプの会場で利用可能な最適な座席を見つけるのに役立つクエリを作成したいと考えています。要件は、ステージに最も近い要求された座席数を見つけることです。座席は順番どおりでなければなりません。
この例のテーブルを考えると:
そして、このスクリプトを使用してテーブルにデータを入力すると、次のようになります。
シーケンシャル/連続した座席の x 数を見つけるための最適なクエリは何ですか?
以下は私の現在のソリューションです。これには、アプリケーションで少なくとも 3 つのクエリが必要です。
たとえば、顧客が次に良い空席を 8 つリクエストした場合、次のクエリを実行します。
次のような結果セットが生成されます。
アプリケーションは、「優先順位 1 で利用可能な座席は 8 つありますか?」と言うでしょう。上記の結果セットでは、答えは「はい」なので、対応するセクション (セクション 1) で使用可能な行数を取得しましょう。これに対するクエリは次のとおりです。
次のような結果セットが生成されます。
アプリケーションはこれらの結果を見て、最初の行から同じ質問をします。「行 A には 8 席ありますか?」上記の結果では、答えはイエスであるため、その時点で、アプリケーションは次のクエリで行 A のすべての座席をクエリします。
次のような結果セットが生成されます。
その時点で、アプリケーションは結果を反復処理して、利用可能な StatusCd が「A」の 8 席を連続して見つけようとします。
行全体をロードしてコードで実行することなく、データベース内の順次レコードを照会するはるかに効率的な方法があると確信しています。
最適な解決策についての私の最善の推測は、テーブルで自己結合を行い、SeatId またはそれらの行に沿って何かをインクリメントすることです。
どんな助けや提案も大歓迎です。
sql - Oracle: 欠落している日付を選択
フィールドに(とりわけ)日付を含むテーブルがあります。
最も古い日付よりも新しい日付、最新の日付よりも古い日付、およびテーブルから完全に欠落しているすべての日付のリストを取得する必要があります。
したがって、テーブルに次のものが含まれているとします。
次を返すクエリが必要です。
sql - 複数の日付範囲間のギャップを表示するSQLクエリ
SSRS / SQLプロジェクトに取り組んでいて、日付間のギャップを取得するためのクエリを作成しようとしていますが、これを作成する方法が完全にわかりません。基本的に、使用をスケジュールできるデバイスがいくつかあり、次のレポートが必要です。それらが使用されていないときに表示します。
デバイスID、EventStart、およびEventEndの時刻を含むテーブルがあります。クエリを実行して、各デバイスのこれらのイベント間の時刻を取得する必要がありますが、これを行う方法がよくわかりません。
例えば:
私のクエリはその結果として持つべきです
この表には、平均して約4〜5台のデバイスがあり、おそらく200〜300以上のイベントがあります。
更新:
わかりました。これを更新して、もう少し情報を提供してみます。これについてはあまりよく説明していないようです(申し訳ありません!)
私が扱っているのは、イベントの詳細が記載されたテーブルです。各イベントはフライトシミュレーターの予約です。多数のフライトシミュレーション(テーブルではデバイスと呼ばれます)があり、SSRSレポートを生成しようとしています。各シムが利用可能な日/時間を示すために顧客に提供することができます。
したがって、開始日/終了日パラメーターを渡し、それらの日付の間のすべての可用性を選択します。結果は次のように表示されます。
また、イベントが重複することもありますが、これは非常にまれであり、データが不良であるため、各デバイスの可用性を個別に知る必要があるため、あるデバイスのイベントが別のデバイスのイベントと重複することは問題ではありません。
mysql - MYSQL: 連続する日付でのテーブルの更新
皆さん、こんばんは。
私は一日中これと格闘してきました。
顧客テーブルで、顧客がサブスクライバーになった回数を表示する列を更新しようとしています。このテーブルは、顧客ごとに個別の行を持つビッグ データ ダンプから作成され、毎月、顧客はサブスクライバーでした (毎月の反復番号が割り当てられます)。名前はユニークです。これは次のように表示され、(たとえば) Jane Doe が期間 1000 では購読者であったが、期間 1002 では購読者でなかったことを示しています。
この場合、Jane Doe は 1000 ~ 1001 のサブスクライバーでしたが、サブスクリプションを終了し、1004 ~ 1005 から戻ってきました。すべての日付ロジック (開始日、終了日、日付コードなど) を含むマスター テーブルがあります。おおよそ次のようになります。
出力を次のようにする方法を見つけようとしています。
誰かが前にこのようなことに遭遇したことがありますか? 数値が連続している (または連続していない) こと、およびサンプル全体を表している (またはしていない) ことは (人間として) 明らかですが、MYSQL にそれを理解させる方法がわかりません。アイデアをいただければ幸いです。
*編集 - Join と Where Not Exists の両方の選択肢を試しましたが、どちらも 10 分後にタイムアウトしました。メインテーブルのサイズ(〜100,000行)が原因だと思います。何か提案はありますか?コメントありがとうございます。
**編集 #2 - インデックスを追加してテーブルを少し調整した後、両方のソリューションがうまく機能します。これを理解する上でのサポートにもう一度感謝します。
mysql - SQL GROUP BY: 連続性の間隔?
アイデアは、次の表があるとします。
連続性によるグループ化が可能な場合、この疑似クエリ
戻るだろう
oID で継続性の中断が発生した場合、または oID 4 を表すエントリが欠落している場合。
そのような機能は Sql の標準関数内に存在しますか?
sql - Oracle SQL で (連続していない場合もある) 期間をグループ化する
ほとんど連続した日を取り、それらが本当に連続しているかどうか、およびその日付に属する値に応じてグループ化するクエリを探しています。Oracle バージョン 11g を使用しています。
これはいくつかのサンプルデータです:
(これは非常に大きなクエリの結果です)
私が探しているのは、これらの日を次のような期間にグループ化することです。
私たちは、私が望むことを行うクエリを作成することができましたが、それはあまり効率的な方法ではなく、より優れた/よりエレガントなものが存在すると確信しています. これは私が今使っているものです:
誰もがこれをより速く、すべての結合なしで行う方法について考えを持っていますか? ありがとう!
mysql - データベースにレコードがない MySQL の結果に日付を追加する方法は?
次の「メッセージ」テーブルを検討してください。
1 日あたりのメッセージ数をカウントしたいが、メッセージがない日もすべて含めたい。2012-02-01 から 2012-03-29 までのすべてのメッセージをカウントしたい場合、クエリの結果は次のようになります。
これは MySQL 内で可能ですか?
sql - データの最新の「ストリーク」の行を返す
次のデータを含む単純なテーブルがあるとします。
PostgreSQL を使用して、最新の連敗または連勝を返すクエリを作成するにはどうすればよいですか? この場合、次の結果を探しています。
答えはlag()
構文を分割することだと思いますが、それを突き止めることはできません。