【发布时间】:2013-03-16 16:32:52
【问题描述】:
我有以下使用 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 和 MAX(timestamp)WHERE 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(userID),而不是基于 max(timeframe)..
当 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
我希望这对大家有所帮助,并再次感谢您的惊人支持。我猜这很简单,但我错过了一些东西..
【问题讨论】:
-
您的最后一个查询应该可以工作,您是否收到任何错误消息?
-
嗨,埃里克,感谢您的回复。最后一个查询没有给我任何记录(空白结果)。
标签: sql-server tsql select group-by max