gpt4 book ai didi

sql - SELECT 哪个 WHERE 子句与结果匹配

转载 作者:行者123 更新时间:2023-11-29 12:07:10 25 4
gpt4 key购买 nike

我有一个数据库,我想在其中进行非常快速和粗略的 geohash 匹配。我想通过降低 geohash 的分辨率来找到第一个最相似的匹配项,直到我命中为止。以下查询获取我感兴趣的所有 geohash,但我需要从下面的集合中选择与我的原始 geohash 最接近的匹配项。

SELECT business_address, geohash FROM geolocation
WHERE
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 12), '%')) OR
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 11), '%')) OR
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 10), '%')) OR
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 9), '%')) OR
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 8), '%')) OR
geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 7), '%'));

问题是我没有明确的方法来排序这个结果,或者添加一个我可以用来排序它们的列。简单地将结果限制为 1 并按 geohash 排序是不够的,因为较低分辨率的匹配可能位于全分辨率 geohash 的任一侧。有没有办法让我在不执行 6 个单独查询的情况下执行此操作?

最佳答案

您可以通过为所有匹配项提供匹配的 slno 来做到这一点,然后找到 slno 的最小值以获得最接近的匹配项

WITH CTE AS (
SELECT business_address, geohash, 12 AS SLNO FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 12), '%'))
UNION ALL
SELECT business_address, geohash, 11 FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 11), '%'))
UNION ALL
SELECT business_address, geohash, 10 FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 10), '%'))
UNION ALL
SELECT business_address, geohash, 9 FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 9), '%'))
UNION ALL
SELECT business_address, geohash, 8 FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 8), '%'))
UNION ALL
SELECT business_address, geohash, 7 FROM geolocation WHERE geohash LIKE (CONCAT(SUBSTRING(:'geohash', 1, 7), '%'));
)
SELECT business_address, geohash, MIN(SLNO) AS SLNO FROM CTE --- change MIN(Slno) as per your need
GROUP BY business_address, geohash

或者您可以根据需要进行更改。

关于sql - SELECT 哪个 WHERE 子句与结果匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57586557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com