1

SQL を使用してから長い時間が経ち、複雑なクエリを実行する必要があったとしても、SQL にはほとんど慣れていません。

次のようなデータ列を持つデータベースがあります。

Key, Instance, User ID, Day, Size

キー- これは主キーです。
インスタンス- これは特定のインスタンスの記述子です (これは一意になります)。
ユーザー ID - これは、このテーブルのエントリ数よりも少ない数のユーザーのうちの 1 人を指します。
- これは、特定のユーザーがこのインスタンスを作成した日です。Day 1 または Day 2 のいずれかになります。
サイズ- これは、保存されるデータのサイズです。

すべてのユーザーが 2 日にインスタンスを作成したわけではありません (ただし、いずれかの日に複数のインスタンスを作成した可能性があります)。

私は、そのユーザー ID が 2 日目にもインスタンスを作成した 1 日目に最大サイズのインスタンスを選択するクエリを求めています。

これをどこから始めればよいか、私は完全に迷っています。

はるかに単純な SQL クエリから返された結果をフィルター処理する C# コードをいくつか書きましたが、期待どおりの結果を得るには遅すぎます。

SQL に期待しすぎていませんか (つまり、私が求めていることは可能でしょうか)? もしそうなら、おそらく複合クエリの各ステップが何をしているのかを説明して、そのようなクエリの例を教えてもらえますか?

ありがとう!

4

2 に答える 2

3
SELECT Top 1 t1.*
FROM table t1
INNER JOIN table t2 on t1.UserID = t2.UserID AND t2.Day = 2
WHERE t1.Day = 1   
ORDER BY Size DESC

説明については、テーブルはそれ自体に結合されているため、結果には両方の日のアクティビティを持つユーザーの行が含まれます。結果はサイズの降順で並べ替えられ、最初の行のみが返されます。これは最大のサイズである必要があります。

于 2013-10-01T10:42:23.780 に答える
1
Select Top 1 Key, Instance, UserId, Day, Size
From Table1 
Where UserId IN (Select UserId from Table1 where Day = 'Day 2') 
And Day = 'Day 1'
Order By Size asc
于 2013-10-01T10:38:49.817 に答える