0


CustomerMasterデータベースに 、AddressesEmailAddresses、 &の 4 つのテーブルがあります。PhoneNumbers

AddressesEmailAddresses、 &PhoneNumbers参照CustomerMasterの主キー。

の各顧客の最新の顧客情報を取得するクエリを作成したいと考えていますCustomerMaster。テーブルを結合する方法は知っていますが、フィールドを使用して、 、、およびの各顧客のテーブルTimeStampから最近更新されたデータのみを取得する方法がわかりません。AddressesEmailAddressesPhoneNumbersCustomerMaster

SQL フィドル: Working Example

カスタマーマスター:

 | CUS_PK | CUS_FirstName | CUS_LastName | CUS_AccountNum
 | 1      | mickey        | mouse        | 000001
 | 2      | donald        | duck         | 100000

住所:

 | ADD_CUS_FK | ADD_StreetAddress | ADD_City | ADD_StateProvince | ADD_PostalCode | ADD_TimeStamp
 | 1          | Disney World      | Orlando  | Florida           | 99999          | 2000-01-01 12:00:00.000
 | 1          | Disney Land       | Anaheim  | California        | 12345          | 2012-12-23 12:00:00.000
 | 2          | Disney World      | Orlando  | Florida           | 99999          | 2001-01-01 12:00:00.000

メールアドレス:

 | EMA_CUS_FK | EMA_EmailAddress       | EMA_TimeStamp
 | 1          | supermouse@disney.com  | 2005-01-01 12:00:00.000
 | 1          | mousehouse@disney.com  | 2006-01-01 12:00:00.000
 | 2          | scrougeheir@disney.com | 2001-01-01 12:00:00.000

電話番号:

 | PHO_CUS_FK | PHO_PhoneNumber | PHO_TimeStamp
 | 1          | 999-999-9999    | 2001-01-01 12:00:00.000
 | 1          | 012-345-6789    | 2013-01-01 12:00:00.000
 | 2          | 666-867-5309    | 2001-01-01 12:00:00.000

クエリ:

 SELECT DISTINCT cm.CUS_FirstName, cm.CUS_LastName, cm.CUS_AccountNum,
 addr.ADD_StreetAddress, addr.ADD_City, 
 addr.ADD_StateProvince, addr.ADD_PostalCode,
 email.EMA_EmailAddress, phone.PHO_PhoneNumber
 FROM  CustomerMaster AS cm
 JOIN  Addresses AS addr
 ON    cm.CUS_PK = addr.ADD_CUS_FK
 JOIN  EmailAddresses AS email
 ON    cm.CUS_PK = email.EMA_CUS_FK
 JOIN  PhoneNumbers AS phone
 ON    cm.CUS_PK = phone.PHO_CUS_FK
 ORDER BY cm.CUS_AccountNum

現在の結果:

Mickey | Mouse | 000001 | Disney World | Orlando | Florida    | 99999 | supermouse@disney.com  | 999-999-9999 
Mickey | Mouse | 000001 | Disney World | Orlando | Florida    | 99999 | supermouse@disney.com  | 012-345-6789
Mickey | Mouse | 000001 | Disney World | Orlando | Florida    | 99999 | mousehouse@disney.com  | 999-999-9999 
Mickey | Mouse | 000001 | Disney World | Orlando | Florida    | 99999 | mousehouse@disney.com  | 012-345-6789
Mickey | Mouse | 000001 | Disney Land  | Anaheim | California | 12345 | supermouse@disney.com  | 999-999-9999 
Mickey | Mouse | 000001 | Disney Land  | Anaheim | California | 12345 | supermouse@disney.com  | 012-345-6789
Mickey | Mouse | 000001 | Disney Land  | Anaheim | California | 12345 | mousehouse@disney.com  | 999-999-9999 
Mickey | Mouse | 000001 | Disney Land  | Anaheim | California | 12345 | mousehouse@disney.com  | 012-345-6789
Donald | Duck  | 100000 | Disney World | Orlando | Florida    | 99999 | scrougeheir@disney.com | 666-867-5309

望ましい結果:

Mickey | Mouse | 000001 | Disney Land  | Anaheim | California | 12345 | mousehouse@disney.com  | 012-345-6789
Donald | Duck  | 100000 | Disney World | Orlando | Florida    | 99999 | scrougeheir@disney.com | 666-867-5309

目的の結果セットを取得するには、既存のクエリをどのように編集する必要がありますか?

拡張 SQL クエリ (できれば SQL Fiddle) を提供してください

4

2 に答える 2

-1

サブクエリを select 句のフィールドとして使用することはできませんか。最新の値が必要なテーブルごとに 1 つのサブクエリ。サブクエリは、たとえば降順のタイムスタンプで「TOP 1」になる可能性があります。

于 2013-05-20T16:43:07.840 に答える