2 つの別々のデータベースに 2 つのテーブルがあります。
表 1 には、ストアド プロシージャを介して取得する必要があるユーザー情報があります。
テーブル 2 ( db2
) には、テーブル 1 のユーザー ID への外部キーがあります。ただし、このテーブルには、ユーザーごとに多数のデータ行が存在する可能性があります。
このテーブルから最も古いレコードだけを取得したい。
すなわち
db1.dbo.userProfile
id int
...
db2.dbo.userRecords
id int
fk_userProfile int
DateCreated DateTime
.....
例として、私のデータが
table 1
id otherData
1 ...
table 2
id fk_userProfile oldestDate otherData
1 1 10/10/2012 ....
2 1 09/10/2012 ....
3 2 10/10/2012 ....
4 1 03/03/2013 ....
ユーザー1に出たい
id = 1, profiledata, 10/10/2012
これは私が最初に試したものですが、上位 1 人のユーザーを返しているため、すべてのユーザーに対して取得する必要があります。また、最も古い日付が最初のレコードであるという保証はありません。
SELECT TOP 1 LastDate as RenewalDate, u.*
FROM db2.dbo.ActionDates AS uad
INNER JOIN Users AS u ON uad.UserId = u.Id
WHERE u.shopId = @shop
私はこれを2つのストアドプロシージャで機能させました.コードでは、ショップのすべてのユーザーを取得し、すべてのユーザーをループして、選択して注文した後にトップ1を行う他のテーブルで選択を行いますが、 1 つのショップに 50 人のユーザーがいる場合、それは 51 のクエリです。
それで、これを1回の選択で行うことができますか、それとも段階的に行って一時テーブルを使用する必要がありますか?