我有两张桌子,我想合并他们的数据。
第一张表
+------------+-----+------+-------+
| BusinessID | Lat | Long | Stars |
+------------+-----+------+-------+
| abc123 | 32 | 74 | 4.5 |
| abd123 | 32 | 75 | 4 |
| abe123 | 33 | 76 | 3 |
+------------+-----+------+-------+
第二个表是:
+------------+-----+------+-------+
| BusinessID | day | time | count |
+------------+-----+------+-------+
| abc123 | 1 | 14 | 5 |
| abc123 | 1 | 15 | 6 |
| abc123 | 2 | 13 | 1 |
| abd123 | 4 | 12 | 4 |
| abd123 | 4 | 13 | 8 |
| abd123 | 5 | 11 | 2 |
+------------+-----+------+-------+
所以我想要做的就是找到所有具有特定半径的企业,并在接下来的一小时内获得比当前更多的支票。
结果是
+------------+
| BusinessID |
+------------+
| abd123 |
| abc123 |
+------------+
因为他们在接下来的一小时内有比以前更多的办理登机手续(6> 5,8> 4)
如果结果按照登记入住号码的差异排序,那将更有帮助。防爆。 (8-4 + 6-5)
SELECT *
FROM table2 t2
WHERE t2.BusinessID IN (
SELECT t1.BusinessID
FROM table1 t1
WHERE earth_box(ll_to_earth(32, 74), 4000/1.609) @> ll_to_earth(Lat, Long)
ORDER by earth_distance(ll_to_earth(32, 74), ll_to_earth(Lat, Long)), stars DESC
) AND checkin_day = 1 AND checkin_time = 14;
从上面的查询中我可以找到半径中的商家,然后在指定的时间内找到他们的签到。防爆。 14.我现在需要做的是找到15小时(相同业务)的签到数量,并查看签到的数量是否大于上一次。
答案 0 :(得分:1)
我想你想要这样的东西:
SELECT
t1.BusinessID
FROM
table1 t1
JOIN
(SELECT
*,
"count" - LAG("count") OVER (PARTITION BY BusinessID, "day" ORDER BY "time") "grow"
FROM
table2
WHERE
/* Some condition on table2 */) t2
ON t1.BusinessID = t2.BusinessID AND t2.grow > 0
WHERE
/* Some condition on table1 */
ORDER BY
t2.grow DESC;