ごとに最大値を取得します。私は、テーブルから名前のグループごとに1つの行を維持する必要があります。グループ
ID | Name | Attribute1| Attribute2 | Attribute3
1 | john | true | 2012-20-10 | 12345670
2 | john | false | 2015-20-10 | 12345671
3 | james | false | 2010-02-01 | 12345672
4 | james | false | 2010-02-03 | 12345673
5 | james | false | 2010-02-06 | 12345674
6 | sara | true | 2011-02-02 | 12345675
7 | sara | true | 2011-02-02 | 12345676
...指定した基準に従って。最初に、Attribute1(存在する場合)、最大の日付(Attribute2)、およびそれが1つの行に結果でない場合は、Attribute1がtrueの保持された行が必要です。
ID|Name|Attribute1|Attribute2|Attribute3
1 | john | true | 2012-20-10 | 12345670
5 | james | false | 2010-02-06 | 12345674
7 | sara | true | 2011-02-02 | 12345676
は私が入れ子になって参加することを実行しようとしましたが、それは非常に複雑であるように思わ:
望ましい結果です。 - いない場合は、いくつかのグローバルで(とキャッシュ名を維持
CREATE TABLE output AS
SELECT
ID,
Name,
Attribute1,
Attribute2,
Attribute3
FROM input
ORDER BY
Name,
Attribute1 DESC,
Attribute2 DESC,
Attribute3 DESC;
、各行に対してループを行うと名前が前に発生したかどうかをチェックし、キャッシュ: 一部単にソリューションは、最初に、ORDER BYのSQLの結果を行うことです変数)、それ以外の行を削除します。
純粋なSQLソリューションはありますか? PostgreSQLの
"最初の場所で*はATTRIBUTE1 *で真との行に保存されなければならない" - 偽 'attribute1の=との行がありますので、ご希望の結果と矛盾します' –
@a_horse_with_no_name私は、postgresqlをインストールする必要なしに簡単な解決策が必要でしたので、sqliteを使い始めましたが、最終的にはどのデータベースでも構いません。グループのすべての行がAttribute1にfalseを持っていても、何かをグループから取得する必要がありますが、Attribute2とAttribute3に基づいているため、attribute1 = trueにすることはできません。 – erhesto
使用するDBMSを決定する必要があります。この種のクエリは、データベースエンジンの機能によって非常に異なります –