SQL Server 2005 を使用した次のデータセットがあります。
TABLE NAME: LOG
TYPE TIMESTAMP USERID
Job 26/03/2013 00:24 DED
Job 21/03/2013 02:31 EGA
Sales NULL NULL
Sales NULL NULL
MAX(timestamp) に基づいて、TYPE、TIMESTAMP、および USERID 列を取得したいと思います。つまり、結果は次のようになります。
Job 26/03/2013 00:24 DED
私は次のことを試しました
SELECT max(timestamp), UserID
FROM log
GROUP BY UserID
ただし、すべての行が返されます。
やってみると
SELECT max(timestamp), max(UserID)
FROM log
GROUP BY UserID
それが返す
Job 26/03/2013 00:24 EGA
返される max(userID) は、アルファベット順にソートされた最大列値であることを理解しています。
最後に試してみると
SELECT *
FROM log
WHERE timestamp = (SELECTmax(timestamp) FROM log)
結果が得られません(空)。
誰かがそれを助けることができれば、それは大歓迎です!
編集の更新:
その助けがあれば-私は複数のテーブルを持っていることを言及する必要がありSELECT
、USERID
WHERE MAX(timestamp)
TYPE`を使用する必要があります.
私はこれが完全に機能することを発見しています:
SELECT Type,
MAX(CASE WHEN log.Type IN ('Job', 'Sales') THEN log.Timestamp ELSE NULL END) As Timestamp,
FROM log
今の問題は、私が試したときです:
SELECT Type,
MAX(CASE WHEN log.Type IN ('Job', 'Sales') THEN log.Timestamp ELSE NULL END) As Timestamp,
MAX(CASE WHEN log.Type IN ('Job', 'Sales') THEN log.UserID ELSE NULL END) As UserID,
FROM log
max(timeframe) ではなく、アルファベット順に基づいて max(userID) を取得します。
TYPE = JOB または SALES の場合、MAX(timeframe) と対応する UserID が必要です
(他の多くの列を含む大きな選択クエリの最後に配置します)。
サンプルクエリの更新:
ここに私が実行しようとしているクエリがあります..私の詳細な知識の欠如を非常に残念に思います!
DECLARE @FROMDATE AS DATETIME, @TODATE AS DATETIME;
SET @FROMDATE = '1 Mar 2013'; SET @TODATE = '31 Mar 2013';
SELECT CASE WHEN country.country_code IN (61,64,673,60,65,679,66,62,92,84,63,91) THEN 'APAC'
WHEN country.country_code IN (81,82,852,853,886) THEN 'EAST ASIA'
WHEN country.country_code IN (44,353,32,45,358,33,49,30,39,352,356,47,351,34,46,31) THEN 'EUROPE'
WHEN country.country_code IN (1,101) THEN 'USA/CANADA' ELSE 'OTHER'
END AS REGION,
info.Status as STATUS, info.Code as CODE,
CONVERT(VARCHAR, info.Start_Date,103) as 'START DATE',
log.Type AS TYPE,
MAX(CASE WHEN log.Type IN ('Job','Sales') THEN log.Timestamp ELSE NULL END) As TIMESTAMP, -- this works fine! :)
MAX(CASE WHEN log.Type IN ('Job','Sales') THEN log.UserID ELSE NULL END) As USERID --having trouble with this! :(
FROM log JOIN info ON (log.id = info.id), country
WHERE info.date BETWEEN @FROMDATE AND @TODATE
AND info.Status NOT LIKE '%NA%'
GROUP BY country.code, info.status, info.code, info.start_date, log.type
皆さんのお役に立てば幸いです。素晴らしいサポートをありがとうございました。これは単純なものだと思いますが、何かが欠けています..