1

首先:感谢收看;感谢您的时间!

重点:

架构:对于 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

基本上,它是两个值nonUniqueID,并且numericValue具有精细的日期。

现在,我需要在整个数据库中获得最大的日期。有了上面的数据,预期的结果是:

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. 从此集合中,找出 DAY 最高的所有记录
  4. 从这个集合中,找到所有 HOUR 最高的记录
  5. 返回此记录

这是我改编自另一个不起作用的 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 个值的一条记录。

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

4

1 回答 1

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 它意味着结果加入一列

编辑

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

于 2012-08-11T02:34:44.550 回答