sqlite - 在几列上使用MAX()获得整行

标签 sqlite max

首先:感谢您的关注;感谢您的时间!

到这一点:

SCHEMA:用于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语法了解不足以创建查询):


查找年份最高的所有记录
从此组中,找到所有具有最高MONTH记录的记录
从该组中,找到DAY最高的所有记录
从此集合中,找到具有HOUR最高的所有记录
返回此记录


这是我从另一个无效的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个值的一条记录。

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

最佳答案

试试这个

 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
这意味着结果被合并到一列中

编辑

香港专业教育学院刚刚更新了我的答案,看看是否可行,我不太确定此查询的性能

关于sqlite - 在几列上使用MAX()获得整行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911369/

相关文章:

sql - SQLite 数据库文件支持的最大表数

SQLITE3真空, "database or disk is full"

bash - 用于导入的 sqlite 字段分隔符

c# - 带有 VS2012 和 .NET 4.5 的 SQLite——任何 CPU 构建

c++ vector 的最小值大于另一个值

r - 在 R 中查找具有模式的列的最大值/最小值

sql - Electron 和Sqlite : SQLITE_NOTADB: file is not a database

mysql left join 所有行的最大值

c++ - 如何在 C++ 中将 const int 设置为最大值?

c - 最小和最大 C 故障