問題タブ [in-subquery]
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.
mysql - 結合へのサブクエリ (in / exists)
これには約29秒の時間がかかります 減らす方法...結合を使用...みんな助けてください... o_cheque_request
request_id
のテーブル構造bigint(20) unsigned NOT NULL auto_increment,
wallet_id
int(11) NOT NULL default '0',
member_id
int(10) unsigned NOT NULL デフォルト '0'、
withdraw_date
date デフォルト NULL、
amount
int(10) unsigned NOT NULL デフォルト '0'、
gross_amount
float(10,2) unsigned NOT NULL デフォルト '0.00'、
admin_charge
float(10,2) unsigned NOT NULL デフォルト '0.00'、
tds
float(10,2) 符号なし NOT NULL デフォルト '0.00'、
repurchase
float(10,2) 符号なし NOT NULL デフォルト '0.00'、
net_amount
float(10,2) 符号なし NOT NULL デフォルト '0.00'、
withdraw_type
varchar( 50) デフォルト NULL、
bank_name
varchar(50) デフォルト NULL、
cheque_no
varchar(50) デフォルト NULL、
courier_name
varchar(50) デフォルト NULL、
tracking_no
varchar(50) デフォルト NULL、
cheque_date
日付デフォルト '0000-00-00'、
PRIMARY KEY ( request_id
)、
KEY member_id
( member_id
)
ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=4738 ;
sql - ネストされた SQL サブクエリでの postgres のパフォーマンスの問題
ケースを単純化するために、次の 3 つのテーブルがあるとします。
A(a_id)、B(b_id、val_b)、C(a_id、b_id、val_c)
B と C から特定の値のペアを持つすべての a_id を見つける必要があります。 ' および val_c='4' および B.b_id=C.b_id) AND ...
私が気付いたのは、(val_b,val_c) ペアをさらにいくつか追加すると、postgres がクエリを実行するのにかなりの時間がかかることです。ID、val_b および val_c のインデックスが存在することに注意してください。
クエリを最適化する方法はありますか? 明示的な内部結合を試みましたが、パフォーマンスの向上には役立ちませんでした。
前もって感謝します
より詳しい情報:
- postgres バージョン 8.2.4
- ペア基準が 1 つだけの場合、77.621 ミリ秒で実行されます
- 2 ペア基準の場合 - 151.588 ミリ秒
3 組の基準 - 49483.979 ミリ秒 <-- パフォーマンスが狂ったように火花を散らす
別のサブクエリ自体は最大 62 ミリ秒で実行されることに注意してください。
アップデート:
Vladimir Baranov によって以下に提案された個別の INTERSECT クエリ バージョンと、Clodoaldo Neto によって bool_or 集計関数を使用する has 句を含むバージョンの両方が、はるかに優れたパフォーマンスを発揮しました。ありがとうございました !
ただし、postgres 8.2 が 3 つのペア基準で始まる元のクエリでパフォーマンスが向上する理由は何ですか?
ところで、Vladimir Baranov の最初の提案で、クエリをクリーン ジョインで書き直すという同じ火花に気付きました。下記参照:
3 セットのクエリは非常に高速に実行されますが、別の 3 ~ 4 セットを追加するとすぐに、クエリのパフォーマンスが 30 ~ 40 秒に低下します。
mysql - 複数の SUBQUERIES を持つ MYSQL
こんにちは、読んでくれてありがとう。
これらを取得したら、テーブル 1 から thisID と thisNAME のみを選択する必要があります。
私はクエリを書くことについて、私の深さが少し足りないことを認めなければなりません...しかし、私は正しい行にいると確信していますか? 何か助けてください??
php - サブクエリの計算エラー?
このクエリが機能しないのはなぜですか?
$h と $k は、それぞれ楕円の x 座標と y 座標です。ここにある式を使用して、(startingLat,startingLong) と (endingLat,endingLong) の 2 つの点が、垂直高さ $r1 および水平高さ $r2 の楕円内にあるかどうかを計算しています。また、検索する行を、距離セル値が $distance * .25 より大きい行に制限しています。
括弧のエラーや、サブクエリ/計算の実行方法に関係があると思います。
使用する
のエラーを返しますYou have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(endingLatitude - 36.9564753)) /796.842964388) + ((endingLongitud' at line 3
mysql - mysqlは、複雑なカウント+時間範囲基準を持つ列を選択します
問題の説明: 過去 15 分間の最新のアラームを取得する次のクエリがあります。
テーブル構造:
必要なもの: これを変更して、次の基準でアラームを取得する必要があります。
a. 過去 15 分間に発生したアラーム (AlmCodes) (元の要件) AND
b. 過去 6 時間の 15 分間のウィンドウのいずれにおいても、各アラーム (AlmCode) が 3 回以上発生していない場合のみ
試し たこと:次のアプローチを試しました:
過去 15 分間の DISTINCT(AlmCodes) を取得します。
AlmCode IN ('3236','4002','4008','4036','4050','4051','4102','4108','4136','4150') の TB_ALM から、distinct(AlmCode) を選択します。 ,'4151','4202','4208','4236','4250','4251','4801','4802','4836','4848','4850','4851',' 4902','4936','4950','4951','5002','5008','5036','5050','5051','5102','5108','5136','5150' ,'5151','5202','5208','5236','5250','5251','5947','5950','5952','5975','5976','5977',' 5978') AND OccurTime >= date_sub(NOW(),interval 15 分) ;
Item-1(上記)をサブクエリとして使用し、各 AlmCode の出現回数を取得します。
select Almcode,concat(date(OccurTime),' ',HOUR(OccurTime)) as HR,count(*) from TB_ALM_HISTORY where AlmCode IN ( select distinct(s.AlmCode) from TB_ALM_HISTORY s where s.AlmCode IN ('3236' ,'4002','4008','4036','4050','4051','4102','4108','4136','4150','4151','4202','4208',' 4236','4250','4251','4801','4802','4836','4848','4850','4851','4902','4936','4950','4951' ,'5002','5008','5036','5050','5051','5102','5108','5136','5150','5151','5202','5208',' 5236','5250','5251','5947','5950','5952','5975','5976','5977','5978') AND s.OccurTime >= date_sub(NOW(),interval 15 分) ) AND OccurTime >= date_sub(NOW(),interval 15*4*24 分) AlmCode、HR でグループ化。
問題:
- Items-2 クエリは (サブクエリ) で永遠に実行され続けますが、2 つの個別のクエリとして実行した場合、以下のように即座に返されます。ここに何が欠けていますか?
クエリ 1: 一意のアラームを取得する
クエリ 2: 過去 6 時間の一意のアラームごとにカウントを取得する
このクエリが東部標準時の午後 6 時に実行されたと仮定すると、AlmCode 5202 は過去 6 時間 (12 ~ 18 時間) に発生したため、この AlmCode の結果は最終的な選択クエリ (過去 15 分間に発生したもの) に含まれるべきではありません。一方、AlmCode 3236 は過去 6 時間に発生しなかったため、この特定の AlmCode で過去 15 分間に発生したすべてのアラームを含める必要があります。
- 1 つのクエリですべての最終出力を取得するにはどうすればよいですか?
a. OccurTime >= 過去 15 分で一意の AlmCode を取得します
b. これらの AlmCode ごとに、過去 6 時間に 3 回発生したかどうかを確認します
c. NO の場合、この AlmCode の OccurTime >= Last 15 Minutes のすべてのアラームをプルします (YES の場合は含めず、単にスキップします)
group-by - Hive サブクエリとグループ BY
私は2つのテーブルを持っています
表1:
表 2:
テーブル 1 に存在するテーブル 2 の各 ID の数が必要です。
結果
私はこのクエリを使用していますが、エラーが発生しています:
エラーは次のとおりです。
「di_device_id」の近くの「WHERE」に EOF がありません
sql - 条件の一部としてのサブクエリの代替ロジック
私は2つのテーブルを持っています:
次のようなクエリを書きたい...
基本的に、T1 の各キーについて、T2 の対応するコードに各クラスの 1 があるかどうかを確認します。その場合、新しい列は 1 です。
問題は、このような条件ステートメントでサブクエリをサポートしていないバージョンの HiveQL を使用していることです。同じ結果セットを達成する別の方法はありますか? 参加したいなと思っていたのですが、T2に対応するキーがないので、この場合どうするのが一番いいのかわかりません。
参考までに、結果セットは次のようになります。