在SQL查询中仅包含过渡状态

时间:2018-10-30 10:59:19

标签: sql transition presto

我有一张有关客户及其购买行为的表,如下所示:

customer     shop       time
----------------------------
   1          5        13.30   
   1          5        14.33
   1          10       22.17
   2          3        12.15
   2          1        13.30
   2          1        15.55
   2          3        17.29

由于我要换班,所以需要以下输出

customer     shop       time
----------------------------
   1          5        13.30   
   1          10       22.17
   2          3        12.15
   2          1        13.30
   2          3        17.29

我尝试使用

ROW_NUMBER() OVER (PARTITION BY customer, shop  ORDER BY time ASC) AS a counter

,然后仅保留所有counter=1。但是,当客户稍后再次访问同一家商店时,这给我带来麻烦,例如本示例中的customer=2shop=3

我想到了这个

WITH a AS 
(
    SELECT 
        customer, shop, time, 
        ROW_NUMBER() OVER (PARTITION BY customer ORDER BY time ASC) AS counter
    FROM 
        db
)
SELECT a1.*
FROM a a1
JOIN a AS a2 ON (a1.device = a2.device AND a2.counter1 + 1 = a1.counter1 AND a2.id <> a1.id)

UNION 

SELECT a.*
FROM a 
WHERE counter1 = 1

但是,这非常低效,并且在我的数据所在的AWS中运行它会导致错误告诉我

  

以此比例系数查询耗尽的资源

有什么方法可以使查询效率更高?

1 个答案:

答案 0 :(得分:0)

这是一个孤岛问题。但是最简单的解决方案使用<?xml version="1.0" encoding="utf-8"?> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.viewpager.widget.ViewPager android:id="@+id/view_pager_top" android:layout_width="300dp" android:layout_height="300dp" /> <include layout="@layout/bottom_sheet_add_listing_media_gallery" /> </androidx.coordinatorlayout.widget.CoordinatorLayout>

lag()