以下は、TestingTable1 のデータです。
BUYER_ID | ITEM_ID | CREATED_TIME
-----------+-------------------+------------------------
1345653 110909316904 2012-07-09 21:29:06
1345653 151851771618 2012-07-09 19:57:33
1345653 221065796761 2012-07-09 19:31:48
1345653 400307563710 2012-07-09 18:57:33
1345653 310411560125 2012-07-09 16:09:49
1345653 120945302103 2012-07-09 13:40:23
1345653 261060982989 2012-07-09 09:02:21
以下は、TestingTable2 のデータです。
USER_ID | PRODUCT_ID | LAST_TIME
-----------+-------------------+-------------------
1345653 110909316904 2012-07-09 21:30:06
1345653 152851771618 2012-07-09 19:57:33
1345653 221065796761 2012-07-09 19:31:48
1345653 400307563710 2012-07-09 18:57:33
onとを比較TestingTable2
する必要があります。そして、から比較した後、すべての(基本的にはカウント)欠落エントリと不一致エントリを見つける必要があります。これのためにSQLフィドルを作成しました-TestingTable1
BUYER_ID
USER_ID
TestingTable2
TestingTable1
http://sqlfiddle.com/#!3/d87b2/1
私のクエリを SQL Fiddle で実行すると、次のような出力が得られます-
BUYER_ID ERROR
1345653 5
からの最後のthree
行TestingTable1
が で欠落しており、 onとからの比較後にTestingTable2
残りが不一致であるため、これは正しいです。two
TestingTable1
BUYER_ID
USER_ID
今、複雑なことが始まります。
問題文-
現在の出力では、エラー カウントが になってい5
ます。したがって、両方のテーブルの最初の行が と である場合、ITEM_ID
とPRODUCT_ID
は同じですがCREATED_TIME
、 とLAST_TIME
は同じではなく、これら 2 つの時間の差は だけ1 minute
です。現在、私はそれを不一致として報告していますが、必要なのは、それらの違いが 以内15 minutes range
にある場合、エラーとして報告したくないということです。したがって、現在のクエリにこの機能を実装した後、最初の行の4
差が範囲内であるため、エラーカウントが発生します。15 minutes range
したがって、スタックオーバーフローの助けを借りて、これに対する解決策を見つけました。以下は、SQLサーバーで正常に機能するSQLクエリです(エラーカウントは4になります)が、Hiveでは機能せず、HiveHive supports only equality JOINS
で以下のクエリを実行できません. したがって、この問題を解決するには別の方法が必要です。どういうわけかwhere句で日付差条件を行うことは可能ですか? Basically how I can rewrite the below SQL query
上記のすべての要件を満たすような他の方法で。
SELECT TT.BUYER_ID,
COUNT(*)
FROM (
SELECT testingtable1.buyer_id,
testingtable1.item_id,
testingtable1.created_time
FROM testingtable2
RIGHT JOIN testingtable1
ON (
testingtable1.item_id = testingtable2.product_id
AND testingtable1.BUYER_ID = testingtable2.USER_ID
AND ABS(DATEDIFF(mi, testingtable1.created_time, testingtable2.last_time)) <= 15
)
WHERE testingtable2.product_id IS NULL
) TT
GROUP BY TT.BUYER_ID;
上記の機能を実装した後に必要な予想出力-
BUYER_ID ERROR
1345653 4
アップデート:-
AS 以下の WEST コメントによると、出力には ERROR カウントが 1 としか表示されませんが、4 と表示されるはずです。また、彼が SQL フィドルに追加した最後の行を削除した後、それは機能せず、ゼロ エラーが発生していますが、これはそうではありません時差にすでに1つのエラーがあるためです。