gpt4 book ai didi

sql - 查找昨天日期每个 BUYER_ID 的 TOP 10 最新记录

转载 作者:行者123 更新时间:2023-12-04 15:57:35 26 4
gpt4 key购买 nike

这是下表

CREATE TABLE IF NOT EXISTS TestingTable1 
(
BUYER_ID BIGINT,
ITEM_ID BIGINT,
CREATED_TIME STRING
)

这是上表中的以下数据-

BUYER_ID    |    ITEM_ID       |    CREATED_TIME
------------+------------------+-----------------------
1015826235 220003038067 2012-07-09 19:40:21,
1015826235 300003861266 2012-07-09 18:19:59,
1015826235 140002997245 2012-07-09 09:23:17,
1015826235 210002448035 2012-07-09 22:21:11,
1015826235 260003553381 2012-07-09 07:09:56,
1015826235 260003553382 2012-07-09 19:40:39,
1015826235 260003553383 2012-07-09 06:58:47,
1015826235 260003553384 2012-07-09 07:28:47,
1015826235 260003553385 2012-07-09 08:48:47,
1015826235 260003553386 2012-07-09 06:38:47,
1015826235 260003553387 2012-07-09 05:38:47,
1015826235 260003553388 2012-07-09 04:55:47,
1015826235 260003553389 2012-07-09 06:54:37,
34512201 597245693 2012-07-09 16:20:21,
34512201 8071787728 2012-07-09 15:19:59,
34512201 5868222883 2012-07-09 08:23:17,
34512201 2412180494 2012-07-09 22:21:11,
34512201 2422054205 2012-07-09 06:09:56,
34512201 1875744030 2012-07-09 19:40:39,
34512201 5639158173 2012-07-09 06:58:47,
34512201 5656232360 2012-07-09 07:28:47,
34512201 959188449 2012-07-09 08:48:47,
34512201 4645350592 2012-07-09 06:38:47,
34512201 5657320532 2012-07-09 05:38:47,
34512201 290419656539 2012-07-09 04:55:47,

如果你在表中看到上面的数据,只有两个 UNIQUE BUYER_ID 和对应的那些我有 ITEM_IDCREATED_TIME。每当我为每个 BUYER_ID 触发此查询(即昨天的日期)时,我只需要 10 条基于今天日期前一天时间的最新记录。

所以对于这个 BUYER_ID - 34512201 我需要 10 条基于昨天 CREATED_TIMEBUYER_ID 的最新记录仅限日期。

并且每个 BUYER_ID 都可以有任何一天的数据。但我对今天的数据(总是指昨天的日期)的前一天特别感兴趣,方法是检查 CREATED_TIME

为每个 BUYER_ID 查找昨天日期的 TOP 10 最新数据。下面是我应该得到的与每个 BUYER_ID 相对应的示例输出。

示例输出。

BUYER_ID    |    ITEM_ID       |    CREATED_TIME
------------+------------------+-----------------------
34512201 2412180494 2012-07-09 22:21:11
34512201 1875744030 2012-07-09 19:40:39
34512201 597245693 2012-07-09 16:20:21
34512201 8071787728 2012-07-09 15:19:59
34512201 959188449 2012-07-09 08:48:47
34512201 5868222883 2012-07-09 08:23:17
34512201 5656232360 2012-07-09 07:28:47
34512201 5639158173 2012-07-09 06:58:47
34512201 4645350592 2012-07-09 06:38:47
34512201 2422054205 2012-07-09 06:09:56
1015826235 210002448035 2012-07-09 22:21:11
1015826235 260003553382 2012-07-09 19:40:39
1015826235 220003038067 2012-07-09 19:40:21
1015826235 300003861266 2012-07-09 18:19:59
1015826235 140002997245 2012-07-09 09:23:17
1015826235 260003553385 2012-07-09 08:48:47
1015826235 260003553384 2012-07-09 07:28:47
1015826235 260003553381 2012-07-09 07:09:56
1015826235 260003553383 2012-07-09 06:58:47
1015826235 260003553389 2012-07-09 06:54:37

我正在使用 Hive 并且 Hive 支持类似 SQL 的语法。所以我需要确保 SQL 也能在 Hive 环境中工作。

谁能帮我解决这个问题?

更新:-

我正在使用下面的查询,我需要从下面的查询中获取前 10 个最新的查询,并且需要为日期检查添加一个限定符,这意味着在 昨天日期的 where 子句中 - 我不能使用TOP 10 这里是因为 Hive 不支持 TOP 10 sql 语法。我需要一些其他方法来解决这个问题。

SELECT * FROM TestingTable1 WHERE ORDER BY buyer_id, created_time DESC;

还有一个更新:-

我使用 RANK UserDefinedFunction 编写了下面的查询。

SELECT buyer_id, item_id, created_time, rk
FROM (
SELECT buyer_id, item_id, rank(item_id) as rk, created_time
FROM testingtable1
DISTRIBUTE BY buyer_id, item_id
SORT BY buyer_id, item_id, created_time desc
) a
WHERE rk < 10
ORDER BY buyer_id, created_time, rk;

这是 Java 中的 RANK UDF 函数-

package com.example.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;

public final class Rank extends UDF{
private int counter;
private String last_key;
public int evaluate(final String key){
if ( !key.equalsIgnoreCase(this.last_key) ) {
this.counter = 0;
this.last_key = key;
}
return this.counter++;
}
}

上面的查询没有按照我想要的方式工作,我想在那个查询中必须进行某种扭曲。

有没有办法在不使用 HiveQL 中的任何 UDF 的情况下做到这一点?

最佳答案

  SELECT FIRST 10 *
FROM TestingTable1
WHERE buyer_id = 34512201
ORDER BY created_time DESC;

关于sql - 查找昨天日期每个 BUYER_ID 的 TOP 10 最新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11405446/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com