0

データベースから特定の属性 (列の値) ごとに 1 つのデータセットのみを取得したいと考えています。例: 次のようなテーブルがあります。

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

また、地区ごとに 1 つの例のみを希望します。例:

deli meal  1        80.456    -56.89
artica     2        67.7080   -69.89
petera     3        89.00     -78.89

どうすればこれを達成できますか? 通常は地区ごとにグループ化するだけですが、他の属性を失います。すべての答えをありがとう!!

4

1 に答える 1

0

これを解決するには多くの方法があります。その 1 つは、サブクエリを使用して、地区ごとに 1 つのレコードを個別に取得することです。使用している 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 に答える