MySQL生产环境_使用SQL中的ROW_NUMBER()函数查找每个ID的最新记录

生产需求

应生产环境要求,需要获取到每个id的最新位置及其他GL属性

ROW_NUMBER函数

        ROW_NUMBER()函数是一种窗口函数,可以根据指定的列对结果集中的行进行编号。通过结合PARTITION BY子句和ORDER BY子句,ROW_NUMBER()函数能够对数据进行分组排序,并为每个分组中的行分配一个唯一的数字序号。


SQL代码:

select *

from

(select *,row_number() over (partition by `id` order by `time` desc ) as rank

from `table1`) 

where rank = 1

-- by_https://blog.csdn.net/qq_52128187?spm=1010.2135.3001.5343

代码逻辑:

        首先使用ROW_NUMBER()函数对表中的数据按照ID进行分区(partition by id),然后按时间降序排序(order by time desc)。这样就创建了一个排名(rank),每个ID组内的第一行将获得排名1,第二行将获得排名2,依此类推。接着,外层查询选择了排名为1的行,即每个ID的最新记录

PySpark代码

# 导入所需的库
from pyspark.sql import SparkSession
from pyspark.sql.window import Window
import pyspark.sql.functions as F

spark = SparkSession.builder.appName("latest_records").getOrCreate()

data = [
    (1, "Record 1", "2022-01-01 12:00:00"),
    (2, "Record 2", "2022-01-02 10:00:00"),
    (1, "Record 3", "2022-01-03 08:00:00"),
    (3, "Record 4", "2022-01-04 14:00:00"),
    (2, "Record 5", "2022-01-05 16:00:00")
]

columns = ["id", "description", "time"]

df = spark.createDataFrame(data, columns)
df = df.withColumn("time", F.to_timestamp("time"))
# 定义窗口规范
windowSpec = Window.partitionBy("id").orderBy(F.col("time").desc())

# 使用ROW_NUMBER()函数查找每个ID的最新记录
ranked_df = df.withColumn("rank", F.row_number().over(windowSpec)).filter(F.col("rank") == 1).drop("rank")

ranked_df.show()

相关推荐

  1. SQLtop、limit以及rownum

    2023-12-10 05:06:02       12 阅读
  2. 如何在mysql生成类似oraclerownum行号?

    2023-12-10 05:06:02       13 阅读
  3. mysql 分组后每个最新一条记录

    2023-12-10 05:06:02       10 阅读
  4. SQL IN 列表最佳使用情况

    2023-12-10 05:06:02       19 阅读
  5. ARCGIS PRO SDK 使用 SQL查询表达式函数

    2023-12-10 05:06:02       20 阅读
  6. SQL SERVER 查询获取分组时间最新信息

    2023-12-10 05:06:02       37 阅读
  7. sql开窗函数使用

    2023-12-10 05:06:02       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 05:06:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 05:06:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 05:06:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 05:06:02       18 阅读

热门阅读

  1. nvue页面用法uniapp

    2023-12-10 05:06:02       43 阅读
  2. Qt OpenCV 学习(文章链接汇总)

    2023-12-10 05:06:02       45 阅读
  3. 谈一谈Linux下的进程和线程

    2023-12-10 05:06:02       42 阅读
  4. Linux 如何解决磁盘空间没有扩大的问题。

    2023-12-10 05:06:02       33 阅读
  5. uart接收数据处理

    2023-12-10 05:06:02       37 阅读
  6. vue实例事件

    2023-12-10 05:06:02       34 阅读
  7. linux命令积累

    2023-12-10 05:06:02       35 阅读
  8. 如何检查mysql表里,某个字段是否存在相同值?

    2023-12-10 05:06:02       39 阅读