0

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

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

我如何实现这一目标?通常我只会按地区分组,但随后我会失去其他属性。谢谢大家的回答!!

4

1 回答 1

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
于 2013-03-21T14:34:42.997 回答