SQL子查询在选择列表中无效

SQL子查询在选择列表中无效,sql,subquery,Sql,Subquery,我正在对同一个表递归地处理下面的代码,但得到了一个错误 *列“checkinout.USERID”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。* SELECT CONVERT(VARCHAR,checktime, 106) gateDate, CONVERT(VARCHAR,checktime, 106) gateIn ,( SELECT TOP 1 CONVERT(VARCHAR(5),CH001.checktime, 108) FROM checkin

我正在对同一个表递归地处理下面的代码,但得到了一个错误

*列“checkinout.USERID”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。*

SELECT CONVERT(VARCHAR,checktime, 106) gateDate, CONVERT(VARCHAR,checktime, 106) gateIn
,(
    SELECT TOP 1 CONVERT(VARCHAR(5),CH001.checktime, 108) 
    FROM checkinout CH001
    WHERE checktype ='I' 
        AND ch001.userid= mm001.userid   
        AND 
        (CONVERT(VARCHAR, CH001.checktime, 112) =CONVERT(VARCHAR, MM001.checktime, 112))
) timeIn

FROM  checkinout MM001
WHERE userid=@empid
*列“checkinout.CHECKTIME”在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。*

SELECT CONVERT(VARCHAR,checktime, 106) gateDate, CONVERT(VARCHAR,checktime, 106) gateIn
,(
    SELECT TOP 1 CONVERT(VARCHAR(5),CH001.checktime, 108) 
    FROM checkinout CH001
    WHERE checktype ='I' 
        AND ch001.userid= mm001.userid   
        AND 
        (CONVERT(VARCHAR, CH001.checktime, 112) =CONVERT(VARCHAR, MM001.checktime, 112))
) timeIn

FROM  checkinout MM001
WHERE userid=@empid

这不可能是整个语句:我在
SELECT
列表中没有看到
checkinout.userid
。因此,通常获得这些错误的唯一方法是,如果您有一个
GROUP BY
子句或一个仅聚合的函数,而这两个函数都没有。什么是RDBMS(显然不是MySQL)、SQL Server?如果没有
orderby
,那么
TOP 1
子句有可能返回未定义的行(我假设条件只能得到一行,但是…)。以这种方式比较时间是不使用索引的好方法。。。列的实际类型是什么?您有哪些值?@Clockwork Muse是对的。如果posted是您仅有的代码,那么就不可能出现给定的错误,因为没有使用聚合函数。还有,这个查询的问题陈述是什么?它是用户最近的最新检查时间吗?我知道这就是错误所抱怨的,但是提供的语句不会首先抛出它们。此外,由于
SELECT
列表在其中一列上使用了非聚合函数,因此您也必须在
GROUP BY
中使用这些函数(您的答案将抛出语法错误)。在分组中包含一列,但不输出它,这会使您的结果变得不准确,因此您的结果无论如何都是错误的。