首先:感谢您的关注;感谢您的时间!
到这一点:
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
基本上,这是两个具有精确日期的值
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语法了解不足以创建查询):
查找年份最高的所有记录
从此组中,找到所有具有最高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/