次の構造を持つtblAssetsInUseというテーブルがあります。
intPK intAssetID datCheckedOut datCheckedIn
1 450 1/5/2009 10/5/2009
2 300 2/5/2009 <NULL>
3 200 2/5/2009 <NULL>
4 450 12/5/2009 5/7/2009
スキャンされたアセットIDを受け取り、チェックアウトまたはインされているアセットのテーブルにそれぞれ挿入または更新するSPがあります。ご覧のとおり、datCheckedInはNullである可能性があり、現在使用されているアセットを特定するために使用されます。この手順は完全に機能します。スキャンされる最後のアセットが何であったか、またテーブルに対する最後の操作(つまり、チェックインまたはチェックアウト)が何であったかを判別できるようにしたいと思います。(どの列に関係なく)最新の日付の行を見つけるSQLコードがあり、これを使用して別のアセットビューに結合します。これも機能します。どういうわけか、最新の日付が[チェックアウト]または[チェックイン]列にあるかどうかを確認できる必要があります。
SELECT TOP (1) allDates.intPK, MAX(allDates.datLastAction) AS datLastScan, dbo.viwAssets.strFriendlyName, tblAssetsInUse_join.intAssetID
FROM (SELECT intPK, MAX(datCheckedOut) AS datLastAction
FROM dbo.tblAssetsInUse AS tblAssetsInUse_out
GROUP BY intPK
UNION ALL
SELECT intPK, MAX(datCheckedIn) AS datLastAction
FROM dbo.tblAssetsInUse AS tblAssetsInUse_in
GROUP BY intPK) AS allDates
INNER JOIN
dbo.tblAssetsInUse AS tblAssetsInUse_join ON allDates.intPK = tblAssetsInUse_join.intPK
INNER JOIN
dbo.viwAssets ON tblAssetsInUse_join.intAssetID = dbo.viwAssets.intPK
GROUP BY allDates.intPK, dbo.viwAssets.strFriendlyName, tblAssetsInUse_join.intAssetID
ORDER BY datLastScan DESC
結果のビット値にフラグを立てるために追加できるリテラル値はありますか?
ご協力いただきありがとうございます、
ポール・レイノルズ