1

下面是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

我需要TestingTable2比较TestingTable1onBUYER_IDUSER_ID。我需要TestingTable2在比较 from 之后找到所有(基本上是计数)丢失和不匹配的条目TestingTable1。我为此创建了 SQL 小提琴 -

http://sqlfiddle.com/#!3/d87b2/1

如果你在 SQL Fiddle 中运行我的查询,你会得到输出——

BUYER_ID    ERROR
1345653       5

这是正确的,因为从on和比较后的最后three一行TestingTable1缺失TestingTable2,其余行two不匹配。TestingTable1BUYER_IDUSER_ID

现在复杂的事情开始了。

问题陈述-

在我当前的输出中,我得到 ERROR count as 5。因此,如果您在两个表中看到第一行ITEM_ID并且PRODUCT_ID相同但不相同,CREATED_TIME并且LAST_TIME这两次之间的差异仅为1 minute. 所以目前我将其报告为不匹配,但我需要的是,如果它们之间的差异在 范围内15 minutes range,那么我不想报告为错误。因此,在我当前的查询中实现此功能后,我将错误计数为 4,因为第一行的差异在 15 分钟范围内。

那么如何在我当前的查询中实现这个功能呢?那是我的问题。

PS-我正在使用 Hive 并且 Hive 支持类似 sql 的语法。所以我认为任何修改都将在我当前的查询中起作用。

4

1 回答 1

1

您的 SQL Server SQL Fiddle 查询可以进行如下修改并使其正常工作。但是,我不确定 Hive 是否支持 datediff

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;
于 2012-07-21T00:53:02.733 回答