我想从数据库中检索每个特定属性(列值)只有一个数据集。 例如:你有一张这样的表:
restaurant district longitude latitude
---------------------------------------
deli meal 1 80.456 -56.89
perseus 1 80.879 -56.00
artica 2 67.7080 -69.89
tieus 2 67.00 -69.00
petera 3 89.00 -78.89
你希望每个地区只有一个例子:
deli meal 1 80.456 -56.89
artica 2 67.7080 -69.89
petera 3 89.00 -78.89
我如何实现这一目标?通常我会按地区分组,但后来我放弃了其他属性。感谢所有答案!!
答案 0 :(得分:0)
有很多方法可以解决它,一个是使用子查询,它分别获取每个区的一条记录。由于您没有提到您正在使用的RDBMS,因此这几乎适用于所有RDBMS。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT district, MAX(longitude) max_val
FROM tableName
GROUP BY district
) b ON a.district = b.district AND
a.longitude = max_val
输出
╔════════════╦══════════╦═══════════╦══════════╗
║ RESTAURANT ║ DISTRICT ║ LONGITUDE ║ LATITUDE ║
╠════════════╬══════════╬═══════════╬══════════╣
║ perseus ║ 1 ║ 80.879 ║ -56.00 ║
║ artica ║ 2 ║ 67.708 ║ -69.89 ║
║ petera ║ 3 ║ 89.00 ║ -78.89 ║
╚════════════╩══════════╩═══════════╩══════════╝
更新1
WITH recordList
AS
(
SELECT restaurant, district, longitude, latitude,
ROW_NUMBER() OVER (PARTITION BY district ORDER BY longitude DESC) rn
FROM TableName
)
SELECT restaurant, district, longitude, latitude
FROM recordList
WHERE rn = 1