【问题标题】:Trying to get a row that has the lat and long from SQL Server试图从 SQL Server 获取具有 lat 和 long 的行
【发布时间】:2017-12-02 05:40:45
【问题描述】:

我有一些数据,我正在尝试选择具有良好 lat long 的每个人,以及下面没有 lat long 的那些是我的数据:

有些数据的lat和long分别为1和0的原因是因为他们的订单在发货之前就进入了erp系统,我们希望在地图中看到这些订单的半径。所以我们希望事实进入事实表,即使我们可能有也可能没有这个客户的纬度或经度。

基本上,如果我有一个像 josh Deshazer 这样的客户,他有 2 个重复的行,因为他进入系统时没有 lat 和 long,最终他的记录得到了 lat 和 long,我只想选择具有良好 lat 的记录并且很长,那么如果我有一个像 mike davis 这样的客户,即使他没有很好的经纬度,我仍然想在查询中全选他

基本上,我希望 josh Deshazer 14.5 和 12.2 以及仅带有 -93 和 45 的 ken johnson 以及带有 1 和 0 的 mike davis 都在一个查询中。感谢任何人的帮助,愿意接受任何建议,这让我很生气。

【问题讨论】:

  • 对于所有具有正确 lat/long 重复条目的记录,lat 和 long 是否会分别为 1 和 0?

标签: sql sql-server


【解决方案1】:

您可以通过使用 ROW_NUMBER 函数来实现这一目标

SELECT
       Long,Lat,FirstName,lastName,OrderNumber FROM
    (
        SELECT Long,Lat,FirstName,lastName,OrderNumber,
            ROW_NUMBER() OVER (PARTITION BY Long,Lat ORDER BY Long,Lat  ) rn
        FROM #TMP 
    ) t
    WHERE t.rn = 1
    ORDER BY FirstName,lastName

【讨论】:

  • @JoshuaDeshazer 欢迎
【解决方案2】:

试试这个:

(SELECT long, Lat, FirstName, LastName, OrderAmount, OrderNumber    
FROM
your_table
WHERE OrderNumber IN (SELECT OrderNumber FROM your_table GROUP BY OrderNumber HAVING COUNT(*) > 1)
AND (long <> 1 AND Lat <> 0))   --Conditions in this line can be tweaked based on how your definition of bad lat/long works
UNION ALL   
(SELECT long, Lat, FirstName, LastName, OrderAmount, OrderNumber    
FROM
your_table
WHERE OrderNumber IN (SELECT OrderNumber FROM your_table GROUP BY OrderNumber HAVING COUNT(*) = 1));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 2015-05-20
    相关资源
    最近更新 更多