新しいシステムの統計に使用するために古いデータベースからユーザーを読み込む必要がありますが、元のユーザーテーブルはありません。しかし、毎年の合計を持つ統計表があり、必要なすべてのユーザー情報を見つけることもできます。加えて、これはまた、私が必要としているアクティブなユーザーだけを提供します。SQLの行を1列、別の列でグループ化する方法
テーブルには、次の関連する列があります(統計情報の列はここでは関係ありません)
- ユーザーID
- 姓
- 姓
- メール
- 年
を私はUserIDを区別したいので、それは唯一のcolです私がGROUP BYで持つことができる列。 最新の年の値を取得するために、MAXでYearを実行します。 FirstName、LastName、およびEmailは、MAX(Year)の行と同じである必要があります。言い換えれば、人々は何年もの間、名前と電子メールの両方を変更している可能性があります。そして、関連する唯一のものとして、最後のものだけを必要とします。 SQLクエリの
私の最高の提案は、このように書きます:
SELECT UserID, Firstname, LastName, Email, MAX(Year) AS Year
FROM myTable
GROUP BY UserID
ORDER BY LastName, FirstName
すべての列のような機能があることを持っているいずれかのために唯一の問題は、SQL Server 2008のは、私はそのようanyhingをやらせないということですMAXまたはGROUP BYの一部です。 FirstName、LastName、およびEmail列は、GROUP BYの下に置くことはできません。どうにかしてMAXをそれらのすべてに置くように働くようですが、MAX関数が実際に作業しているカラムを知る方法がありません。私はそれが問題になるかどうかはわかりませんが、実際に問題があるかどうかを調べるのに100 000行を調べる時間がありません。
つまり、MAXでは1つの列のみでGROUP BYは別の列で動作する5列の行全体が必要です。誰かが良い解決策を持っているのですか、またはグループ化していない行すべてでMAXを使用するのは実際に安全ですか?
2番目のクエリでサブクエリに 'GROUP BY UserID'が必要です。 –
@ypercube - Ooops :)気が散った電話が私に気を散らした:) – MatBailie
うわー、これはすばやい反応でした。皆さんのお返事ありがとうございます!私は1分で事務所から家に帰るだろうが、夕方に自宅から彼らを詳しく見る。 – bergenga