在几列上使用MAX()获取整行

时间:2012-08-11 02:23:28

标签: sqlite max

首先关闭:谢谢你的期待;感谢您的时间!

指出:

SCHEMA:for myTable

nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
1              2012    01       01     01      99.9
1              2012    01       01     02      65.2
1              2012    01       01     03      -88
7              2012    02       08     21      9.08
1              2012    01       01     09      99.913
1              2013    01       01     01      99.999999

基本上,它是两个值nonUniqueIDnumericValue,具有精确的日期。

现在,我需要在整个数据库中获得最佳日期。根据上述数据,预期结果将是:

nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
1              2013    01       01     01      99.999999

因为这是SQLite,我知道我最终将不得不多次使用MAX()。订单必须是MAX(YEAR),然后是MAX(MONTH),然后是MAX(DAY),然后是MAX(HOUR)。

基本上,查询会像这样工作(我只是不太了解SQL语法来创建查询):

  1. 查找年份最高的所有记录
  2. 从此设置中,查找MONTH最高的所有记录
  3. 从此设置中,查找日历最高的所有记录
  4. 从此设置中,找到所有HOUR
  5. 最高的记录
  6. 返回此记录
  7. 这是一个我从另一个不起作用的StackExchange问​​题改编的SQL

    Select * From ( 
        Select max(YEAR) as Y FROM myTable 
    
        union 
    
        Select max(MONTH) as M FROM myTable 
    
        union 
    
        Select max(DAY) as D FROM myTable 
    
        union
    
        Select max(HOUR) as H FROM myTable 
    ) myTable;
    

    返回

    Y
    -----
    21 
    08 
    02 
    2013
    

    将此与预期结果进行比较:

    nonUniqueID    YEAR    MONTH    DAY    HOUR    numericValue
    1              2013    01       01     01      99.999999
    

    它返回4条记录而不是4条值的一条记录。

    有人可以帮我查询一下吗?谢谢!

1 个答案:

答案 0 :(得分:3)

试试这个

 SELECT nonUniqueID ,  YEAR ,  MONTH ,  DAY ,  HOUR ,  numericValue FROM myTable as a
 INNER JOIN (Select max(MONTH) FROM  myTable) as b
 ON a.YEAR = B.YEAR
 INNER JOIN (Select max(DAY) FROM myTable) as c
 ON b.YEAR = c.YEAR
 INNER JOIN (Select max(HOUR) FROM myTable) as d
 ON c.YEAR = d.YEAR
 WHERE a.YEAR = (Select max(YEAR) FROM myTable) 

它返回4个值,因为您使用UNION 这意味着结果是连接在一列

修改

我刚刚更新了我的答案,看看是否有效我不太确定这个查询的表现