我的sql代码有错误

时间:2015-07-30 10:42:47

标签: sql

SQL代码:

select DeviceUID, LogType
from `DeviceUsage_Table`
where DeviceUID in (select DeviceUID, Max(LogTime) 
                    from `DeviceUsage_Table` 
                    group by DeviceUID);

错误:

  

操作数应包含1列

我该如何解决?

我想将第一个选择结果用作新条件。

select DeviceUID, Max(LogTime) 
from `DeviceUsage_Table` 
group by DeviceUID

此代码我可以获取每个DeviceUID及其最后LogTime

我使用查询结果选择最后LogTime时的DeviceUID的LogType,所以我的方法如上所述。

4 个答案:

答案 0 :(得分:2)

您的子查询:

"SELECT DeviceUID, Max(LogTime) FROM `DeviceUsage_Table` group by DeviceUID" 

当前返回两列,即DeviceUID和Max(Logtime)。这不会与DeviceUID in一起使用,因为in需要一个列表。手写列表:("A", "B", "C")或只返回一列的查询。

你回复Max(LogTime)的原因是什么?然后我可以帮助更多。

答案 1 :(得分:0)

错误消息是显式的,这是因为根据SQL的规则,为了使用“in”关键字,以下SELECT必须只返回1列。所以你可能想做类似的事情:DeviceUID in(SELECT DeviceUID FROM ...

答案 2 :(得分:0)

您正在子查询中选择两列。由于您要与一列进行比较,因此您应该只有一个。请尝试以下查询

select DeviceUID, LogType from `DeviceUsage_Table`
        where DeviceUID in 
              (SELECT DeviceUID FROM `DeviceUsage_Table` group by DeviceUID);

答案 3 :(得分:0)

那么,

(SELECT DeviceUID, Max(LogTime) FROM `DeviceUsage_Table` group by DeviceUID)

返回两列,因此您无法在IN子句中使用它。如何解决它取决于您对查询的要求。

select DeviceUID, LogType
  from `DeviceUsage_Table`
  where DeviceUID in (SELECT DeviceUID FROM `DeviceUsage_Table` group by DeviceUID);

会有效,但没有意义,因为它与

相同
select DeviceUID, LogType
  from `DeviceUsage_Table`
  where DeviceUID