DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(street VARCHAR(12) NOT NULL
,house_no INT NOT NULL
,PRIMARY KEY(street,house_no)
);
INSERT INTO my_table VALUES
('street_1',11),
('street_1',12),
('street_1',13),
('street_1',14),
('street_2',12),
('street_2',13),
('street_2',14),
('street_2',15),
('street_3',13),
('street_3',14),
('street_3',16),
('street_4',16),
('street_4',17),
('street_4',18),
('street_4',19);
SELECT x.*
FROM my_table x
JOIN
(SELECT street, MIN(ABS(house_no-15)) best_match FROM my_table GROUP BY street) y
ON y.street = x.street
AND y.best_match = ABS(x.house_no-15);
+----------+----------+
| street | house_no |
+----------+----------+
| street_1 | 14 |
| street_2 | 15 |
| street_3 | 14 |
| street_3 | 16 |
| street_4 | 16 |
+----------+----------+
不,沒有「最接近」的功能,所以'按abs()'命令排序就是你所能做的。最糟糕的情況是,您可以使用子查詢來計算'house_no -15'內容,然後在父查詢中進行分組/過濾。 –
對不起,ABS方法有什麼問題?爲什麼需要彙總? – Strawberry
@Strawberry我需要彙總,因爲我需要所有街道的結果。或者,我可以在PHP中進行後處理(無論如何,我的工作流程中都會涉及其他一些處理)。 – user1702401