【问题标题】:How to apply DISTINCT selector in MySQL for just one column如何在 MySQL 中为一列应用 DISTINCT 选择器
【发布时间】:2012-09-07 12:40:37
【问题描述】:

我有一张如下表:-

表:交易 +----+--------+---------+----------+------------+ |身份证 |姓名 |纬度 |经度|结束日期 | |----+--------+----------+----------+------------+ | 1 |比萨饼| 10.5 | -10.5 | 2012-12-12 | | 2 |比萨饼| 11.5 | -10.5 | 2012-12-12 | | 3 |果冻| 21.5 | -10.5 | 2012-12-12 | | 4 |果冻| 23.5 | -10.5 | 2012-12-12 | | 5 |百合 | 19.5 | -10.5 | 2012-12-12 | +----+--------+---------+----------+------------+

我正在使用latitudelongitude 来查找与该人的距离。但我需要基于name 的结果为DISTINCT。我还需要按我计算的距离对结果进行排序并应用限制 0,3。

我当前使用的查询是“-

SELECT *,
   ( 6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(lat)) * Cos(
                               Radians(lng) - Radians(76.259498)) +
                          Sin(Radians(9.939625)) * Sin(Radians(lat))) ) AS
   distance
FROM   deals
WHERE  1
   AND end_date >= Now()
HAVING distance < 20000
ORDER  BY id DESC,
      distance
LIMIT  0, 3;  

简而言之,我需要的是:-

  1. 最近的交易列表(按距离排序)
  2. name 应用 distinct(这样比萨饼和果冻都只会出现一次)

【问题讨论】:

  • 在 2 个可用距离中,您需要距离最短的名称。对吗?
  • 是的,正确的。需要先显示最近的。

标签: mysql sql


【解决方案1】:

您需要应用 MIN 来获得每个名称的最小距离,GROUP BY 名称(每个名称给出一个结果)和 ORDER BY 先是距离,然后是 id;

SELECT *,
   MIN( 6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(latitude)) * Cos(
                               Radians(longitude) - Radians(76.259498)) +
                          Sin(Radians(9.939625)) * Sin(Radians(latitude))) ) 
AS distance
FROM   deals
WHERE  end_date >= Now()
GROUP BY name
ORDER  BY distance, id DESC

我应该补充一点,这个查询可能适合您的情况,但通常不是很有用,因为如果您想知道最近的比萨店的纬度和经度,您将需要一个完全不同的查询。

【讨论】:

    【解决方案2】:
    SELECT *, 
       ( 6371 * Acos(Cos(Radians(9.939625)) * Cos(Radians(lat)) * Cos( 
                                   Radians(lng) - Radians(76.259498)) + 
                              Sin(Radians(9.939625)) * Sin(Radians(lat))) ) AS 
       distance 
    FROM   deals 
    WHERE  1 
       AND end_date >= Now() 
    GROUP BY name
    HAVING distance < 20000 
    ORDER  BY id DESC, 
          distance 
    

    【讨论】:

      猜你喜欢
      • 2011-10-08
      • 1970-01-01
      • 2012-07-23
      • 2010-11-01
      • 2012-05-19
      • 2021-04-08
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      相关资源
      最近更新 更多