SQL查询:每个特定的attribut只有一个数据集

时间:2013-03-21 14:32:29

标签: sql select group-by where-clause

我想从数据库中检索每个特定属性(列值)只有一个数据集。 例如:你有一张这样的表:

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

我如何实现这一目标?通常我会按地区分组,但后来我放弃了其他属性。感谢所有答案!!

1 个答案:

答案 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