0

私は2つのテーブルを持っています。1 つのテーブルは場所情報を示し、別のテーブルはその場所の wifi ssid とパスワードを示します。これらのテーブルは、列「LocationID」によって結合されています。2 つの別々のテーブルの理由は、特定の場所の ssid とパスワードの履歴を保持できるようにするためです。

私のクエリは次のとおりです。

SELECT Location.LocationID,
    Location.SystemName,
    Location.SiteNameLocation,
    Location.SiteAddress1,
    Location.SiteAddress2,
    Location.SiteCity,
    Location.SiteProvince,
    Location.SitePostalCode,
    Location.ContactName,
    Location.ContactPhone, 
    Location.ContactEmail,
    Location.ID1POC,
    Location.ID2District,
    Location.SiteLocationHours,
    LocationWiFi.WiFiSSID,
    LocationWiFi.WiFiPassphrase,
    LocationWiFi.WiFiDate
    FROM Location
    LEFT JOIN LocationWiFi ON LocationWiFi.LocationID = Location.LocationID

私がする必要があるのは、テーブルから最新のwifi ssidとパスフレーズを取得して、対応するlocationIDで表示することです

次のクエリでそれを行うことができます:

SELECT * FROM LocationWiFi WHERE WiFiDate = (SELECT MAX(WiFiDate) FROM LocationWiFi) AND LocationID = xxxx

それほど難しいことではないと確信しています。私はそれを完全に理解することはできません。助けてくれてありがとう!

編集...

混乱させてすみません。もっとはっきりさせてください。ロケーション テーブルに 1500 以上のエントリがあります。同じロケーション ID を持つ LocationWiFi テーブルの 2 つのエントリ。1500 行以上をすべて返すには、最初のクエリ (結合を含むクエリ) が必要ですが、wifi ssid とパスワードを最大日付でプルするだけです。wifi ssid とパスフレーズがない場所については、null 値で列を表示したいだけです。

改めてお詫び申し上げます

解決

皆さんこんにちは、

私はこの問題を解決しました。同様の解決策を持っている人にとっては、これが私にとってうまくいったものです。

SELECT Location.LocationID,
    Location.SystemName,
    Location.SiteNameLocation,
    Location.SiteAddress1,
    Location.SiteAddress2,
    Location.SiteCity,
    Location.SiteProvince,
    Location.SitePostalCode,
    Location.ContactName,
    Location.ContactPhone, 
    Location.ContactEmail,
    Location.ID1POC,
    Location.ID2District,
    Location.SiteLocationHours,
    a.WiFiSSID,
    a.WiFiPassphrase
    FROM Location
    LEFT JOIN(
SELECT LocationWiFi.WiFiSSID,
           LocationWiFi.WiFiPassphrase,
           LocationWiFi.LocationID
FROM LocationWiFi
WHERE LocationWiFi.WiFiDate = (SELECT MAX(WiFiDate) FROM LocationWiFi)
    ) AS a
    ON a.LocationID = Location.LocationID;
4

2 に答える 2

0

次のクエリは、サブクエリを使用していないため、より効率的です。

SELECT * 
FROM LocationWiFi 
WHERE LocationID = xxxx
ORDER BY WiFiDate DESC
LIMIT 1
于 2013-11-09T23:41:16.080 に答える