【问题标题】:SQL Order by Timestamp and Assign Numeric ValueSQL 按时间戳排序并分配数值
【发布时间】:2015-02-04 14:58:39
【问题描述】:

我有一个活动的 cust_id 和时间戳列表。我想添加一个名为“activity_order”的列,它会给每个 cust_id 一个顺序,其中“1”被分配给最大时间戳

 cust_id | time_stamp
 ________  __________
 a1        2015-01-31 10:48:43
 a1        2015-01-31 12:48:46
 a1        2015-01-31 17:50:40
 b1        2015-01-25 10:39:01
 b1        2015-01-31 12:53:34

这就是我想要的结果:

 cust_id | time_stamp            | activity_order
 ________  ___________________    _________________
 a1        2015-01-31 10:48:43     3    
 a1        2015-01-31 12:48:46     2
 a1        2015-01-31 17:50:40     1
 b1        2015-01-25 10:39:01     2
 b1        2015-01-31 12:53:34     1

这是我的尝试,但问题是这个 CASE 语句只有这么大,我想我需要一个循环或类似的东西,以防 cust_id 有大于 2 个活动。

SELECT a.cust_id
,a.time_stamp
,CASE WHEN a.time_stamp = b.max_ts THEN 1 ELSE 2 END as activity_order
FROM ACTIVITY a
JOIN (SELECT
cust_id
,MAX(time_stamp) as max_ts
FROM activity_order) b
ON a.cust_id = b.cust_id

【问题讨论】:

    标签: sql hive hql


    【解决方案1】:
    SELECT cust_id
    , time_stamp
    , RANK () OVER(PARTITION BY cust_id ORDER BY time_stamp DESC) as activity_order
    FROM activity
    ORDER BY cust_id ASC, activity_order DESC
    

    工作示例:http://sqlfiddle.com/#!6/b6d85/3

    欲了解更多信息:http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions123.htm

    【讨论】:

      【解决方案2】:

      尝试假设 MS SQL

      Update B
      Set Activity_Order = RN
      From
      (select CustID, [Time_stamp], Row_Number() Over(Partition By CustID Order By [Time_stamp] desc) as RN
      From Activity) A
      inner join Activity B on A.CustID = B.CustID and A.[Time_stamp] = B.[Timestamp]
      

      【讨论】:

        【解决方案3】:

        我会给我们 Row_Number 一个分区。 注意:您使用 3 个 cust_ID:a1、b1、b2。但是您的示例在 b2 下订购了 b1。 这是您的示例中的错误吗?

        这是我的尝试:

        SELECT 
        cust_id, time_stamp, 
        activity_order = ROW_NUMBER() OVER (PARTITION BY cust_id ORDER BY cust_id     ASC, time_stamp DESC) 
        FROM ACTIVITY 
        

        【讨论】:

          猜你喜欢
          • 2012-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-08-22
          • 2021-05-14
          • 2017-09-10
          • 2017-08-16
          相关资源
          最近更新 更多