私はSQLを初めて使用し、次のクエリを実装したいと考えています。
私は2つのテーブルを持っています、LicenseTbl
そしてUnlockTbl
:
LicenseTbl
購入したソフトウェアライセンスに関する情報が含まれています。
LicenseID、ProgramID、Owner、Location、OrderNo、BlockTime
UnlockTbl
特定のソフトウェア登録に関する情報が含まれています。
UnlockID、LicenseID(LicenseTblへの外部キー)、Timestamp、SerialNo、Key、UninstallTime
ここで、BlockTimeとUninstallTimeには、ライセンスがブロックされた場合、またはソフトウェアがアンインストールされた場合などにタイムスタンプが含まれNULL
ます。
次の条件が当てはまるすべてのLicenseIDを取得するクエリを考案したいと思います。
- 特定の顧客に属し、
- ブロックされていません、
- UnlockTblにリストされていないか、アンインストール済みとしてマークされていない行にX個未満の異なるSerialNoがあります。
私はこれを書きましたが、それが絶対的に正しいかどうかはわかりません(これは私の最初のSQLクエリの1つです):
SELECT LicenseID FROM LicenseTbl
JOIN UnlockTbl
ON (LicenseTbl.LicenseID = UnlockTbl.LicenseID)
WHERE LicenseTbl.OrderNo = '$givenOrderNo'
AND LicenseTbl.Owner = '$givenOwner'
AND LicenseTbl.Location = '$givenLocation'
AND LicenseTbl.BlockTime IS NULL
AND UnlockTbl.UninstallTime IS NULL
GROUP BY LicenseTbl.LicenseID, UnlockTbl.Key
HAVING COUNT(*) < $X
(つまり、同時に使用された回数がX回未満のすべてのライセンスを一覧表示します。最初に使用された回数が最も少ないライセンスを優先しますが、そのように並べ替える方法がわかりません。)