0

我有一个包含以下列的表格:

userid, datetime, type

样本数据:

userid  datetime               type
   1    2013-08-01 08:10:00     I
   1    2013-08-01 08:12:00     I 
   1    2013-08-01 08:12:56     I

除了具有 min(datetime) 的行之外,我只需要获取两行的数据

我为 min(datetime) 获取数据的查询是:

SELECT  
    USERID, MIN(CHECKTIME) as ChkTime, CHECKTYPE, COUNT(*) AS CountRows
FROM
    T1
WHERE 
    MONTH(CONVERT(DATETIME, CHECKTIME)) = MONTH(DATEADD(MONTH, -1,
CONVERT(DATE, GETDATE())))
    AND YEAR(CONVERT(DATETIME, CHECKTIME)) = YEAR(GETDATE()) AND USERID=35
    AND CHECKTYPE='I'
GROUP BY 
    CONVERT(DATE, CHECKTIME), USERID, CHECKTYPE 
HAVING 
    COUNT(*) > 1 

非常感谢您的帮助..thnx

4

2 回答 2

1

也许这样的事情会帮助你:

WITH CTE AS 
(
    SELECT *, ROW_NUMBER() OVER (PARTITION BY userid ORDER BY checktime) RN
    FROM dbo.T1
    WHERE CHECKTYPE = 'I' 
    --add your conditions here
)
SELECT * FROM CTE
WHERE RN > 1

使用CTEROW_NUMBER()函数,这将为每个用户选择除 min(date) 之外的所有行。

SQLFiddle 演示

于 2013-09-11T09:17:18.933 回答
0
SELECT * FROM YOURTABLE A
INNER JOIN
(SELECT USERID,TYPE,MIN(datetime) datetime FROM YOURTABLE GROUP BY  USERID,TYPE )B
ON
A.USERID=B.USERID AND
A.TYPE=B.TYPE 
WHERE A.DATETIME<>B.DATETIME
于 2013-09-11T09:20:08.470 回答