mysql订单分组依据

6za6bjd0  于 2021-06-25  发布在  Mysql
关注(0)|答案(2)|浏览(328)

如果以前有人问过这个问题,我很抱歉,但我似乎找不到任何(好的)答案。
我想这能更好地解释我的问题

CREATE TABLE posts (
  id INT,
  name VARCHAR(10)

);

INSERT INTO posts VALUES
  (1, 'Product 1'),
  (2, 'Product 2');

CREATE TABLE details(
  id INT,
  merchant VARCHAR(10),
  address INT,
  lat decimal(11,8) ,
  lng decimal(11,8) ,
  offer_group INT(10)
) ;

INSERT INTO details VALUES
  (1, 'Merchant 1',10,40.444444,60.666666,1),
  (2, 'Merchant 1',20,40.555555,60.777777,1);

SELECT  P.*, D.*  , MIN( 3959 * acos( cos( radians('40.555556') ) * cos( radians( D.lat ) ) * cos( radians( D.lng ) - radians('60.777778') ) + sin( radians('40.555556') ) * sin( radians( D.lat ) ) ) ) AS distance  FROM posts P

  JOIN details D ON D.id = P.id 

  WHERE 1=1  GROUP BY merchant ORDER BY  distance ASC

http://sqlfiddle.com/#!9/7db78b/6我有单独的数据库,但示例链接准确地显示了表的链接方式和我当前的查询。
因此,在该示例中,如果您离开组的距离是距离地址为20的商户,但我希望看到正确的数据(id=2,name=product 2,address=20,lat=40.555555,lng=60.777777)
将组按部分移除,首先查看它的外观
谢谢,对不起,解释得不好

wwwo4jvm

wwwo4jvm1#

您可以使用以下查询,

SELECT m1.* 
FROM merchants m1 
WHERE m1.distance = (SELECT MIN(distance) FROM merchants m2 where m1.name = m2.name);
fykwrbwg

fykwrbwg2#

您可以使用以下选项:

SELECT m1.* 
 FROM merchants m1 INNER JOIN (
     SELECT name, MIN(distance) AS distance FROM merchants GROUP BY name
 ) m2 ON m1.name = m2.name AND m1.distance = m2.distance

demo:http://sqlfiddle.com/#!9/6楼9676/1/0

相关问题