用于同一表的多个查询的SQL结构(使用窗口函数、大小写、联接)
我有一个复杂的生产SQL问题。它实际上是PrestoDB Hadoop,但符合公共SQL 我必须从一个表中获取一系列指标,有点像这样(如果表被弄坏了,很抱歉): 我需要这样的东西:用于同一表的多个查询的SQL结构(使用窗口函数、大小写、联接),sql,join,presto,dense-rank,Sql,Join,Presto,Dense Rank,我有一个复杂的生产SQL问题。它实际上是PrestoDB Hadoop,但符合公共SQL 我必须从一个表中获取一系列指标,有点像这样(如果表被弄坏了,很抱歉): 我需要这样的东西: +--------+------------------+-------------------------+ | device | max_install_date | previous_account_number | +--------+------------------+-----------------
+--------+------------------+-------------------------+
| device | max_install_date | previous_account_number |
+--------+------------------+-------------------------+
| dev 1 | 10-Jun | 456 |
| dev 2 | 25-Jun | 50 |
+--------+------------------+-------------------------+
select device, max(install_date) as max_install_date
from (select [a whole bunch of stuff], dense_rank() over(partition by device order by [something_else]) rnk
from some_table a
)
我可以执行两个单独的查询以获取最大安装日期和以前的帐号,如下所示:
+--------+------------------+-------------------------+
| device | max_install_date | previous_account_number |
+--------+------------------+-------------------------+
| dev 1 | 10-Jun | 456 |
| dev 2 | 25-Jun | 50 |
+--------+------------------+-------------------------+
select device, max(install_date) as max_install_date
from (select [a whole bunch of stuff], dense_rank() over(partition by device order by [something_else]) rnk
from some_table a
)
但是,如何将它们组合到一个查询中,为每个设备获得一行呢?我有秩、语句、case语句和一个join。它们都是单独工作的,但我正绞尽脑汁想知道如何将它们结合起来
我需要了解如何构造大型查询
附言:你有没有推荐一些关于高级SQL数据分析的好书?我在Amazon上看到了很多,但是没有任何东西告诉我如何构建这样的大型查询。我不是DBA。我是一个数据员
谢谢 您可以使用相关的子查询方法:
select t.*
from table t
where install_date = (select max(install_date) from table t1 where t1.device = t.device);
这假设install\u date
具有resonbale日期格式 我想你想要:
select t.*
from (select t.*, max(install_date) over (partition by device) as max_install_date,
lag(customer_account) over (partition by device order by install-date) as prev_customer_account
from t
) t
where install_date = max_install_date;