最新の個別のレコードを取得する必要がある雑然としたデータが取り込まれているサード パーティのテーブルがあります。テーブルには、毎年、または「人」が変わるたびに新しい行が供給されます。テーブルは、最新の ActiveDate が正しい人であることに基づいて機能します。これを示すために、モック テーブルとデータを作成しました。
CREATE TABLE `Persons` (
`PersonId` varchar(200) NOT NULL,
`Name` varchar(200) NOT NULL DEFAULT '',
`ActiveDate` varchar(25) NOT NULL,
`ExpireDate` varchar(25) DEFAULT NULL,
`Job` varchar(200) NOT NULL DEFAULT '',
`Position` varchar(200) NOT NULL DEFAULT ''
)
そしていくつかのモックデータ:
Id |`Name` |ActiveDate |ExpireDate |Job |`Position`
---------------------------------------------------------------------------------------------------
J1234 |Doe, John |2010-08-15 00:00:00 |2011-08-15 00:00:00 |Worker |Janitor
J1234 |Doe, John |2011-08-15 00:00:00 |0000-00-00 00:00:00 |Worker |Janitor
777 |Doe, Jane |2010-06-04 00:00:00 |0000-00-00 00:00:00 |Boss |Janitor
777 |Doe, Jane |2011-04-30 00:00:00 |0000-00-00 00:00:00 |Boss |Janitor
654G |Smith, Jane |2011-01-20 00:00:00 |0000-00-00 00:00:00 |Worker |Janitor
テーブルには、実際にはエンド ユーザーが設定する ExpireDate 列もあり、常に設定されているとは限りません。現在、ダミーテーブルを使用して、個別のレコードを取り出してその日に保存しています。私は一時テーブルを使用しますが、MySQL での使用方法を 100% 確信しているわけではなく、嫌いです。私がやっている方法は、より良い SQL を期待して一時的なものです。
次に、完成品を得るために、データを他の多数のテーブルと結合する必要があります。しかし、まだ個別のデータの初期セットを処理する必要があります。そして、最初から他のテーブルに参加してもうまくいきません。
したがって、データをプルして保存し、後で再度プルして他のテーブルに結合する方法は次のとおりです。
INSERT INTO tmp_Person (Id, `Name`, Job, `Position`)
SELECT DISTINCT Id, `Name`, Job, `Position`
FROM Person
SELECT tmp_Person.Id,
tmp_Person.`Name`,
tmp_Person.Job,
tmp_Person.`Position`,
Pricing.Cost,
Pricing.Benefit
FROM tmp_Person
LEFT OUTER JOIN Pricing AS CL ON CL.PersonId = tmp_Person.Id
AND CL.PriceScredule = 'Major-Client'
AND CL.ExpireDate = '0000-00-00 00:00:00'
LEFT OUTER JOIN Pricing AS Inter ON Inter.PersonId = tmp_Person.Id
AND Inter.PriceScredule = 'Internal-Client'
AND Inter.ExpireDate = '0000-00-00 00:00:00'
一時テーブル (任意の形式) を使用して重複する行を処理するコストを回避するために、これをどのように記述できますか? うまくいけば、私はこれを十分に明確にしました.そうでない場合は、喜んで追加または明確にすることができます.