needhelp2 2024-08-08 19:19 采纳率: 14.3%
浏览 6

现在想获取一个手机号对应一个产品名的最新日期的一条记录(标签-sql)

img


如上图,现在想获取一个手机号对应一个产品名的最新日期的一条记录,这个sql怎么写?主要目的给数据进行去重,保留单个手机号对应的两个产品名的最新日期记录。或者用spark代码写也可以

  • 写回答

1条回答 默认 最新

  • 一直免费一直爽 2024-08-11 23:27
    关注

    以下回复参考:皆我百晓生券券喵儿等免费微信小程序作答:

    要查询一个手机号码对应的一个产品名的最新日期的记录,我们可以使用SQL的GROUP BY语句以及ORDER BY子句。首先,我们需要确保您的数据库表结构中包含以下列:手机号、产品名和日期。然后,您可以使用以下SQL查询:

    SELECT T1.手机号, T1.产品名, MAX(T2.日期) as 最新日期
    FROM (
        SELECT 电话号码, '高潜' as 产品名, 日期 as `日期`
        FROM 表1
    ) AS T1,
    (
        SELECT 电话号码, '预审' as 产品名, 日期 as `日期`
        FROM 表2
    ) AS T2
    WHERE T1.电话号码 = T2.电话号码
    GROUP BY T1.电话号码, T1.产品名;
    

    这段SQL查询首先从两个表中选择匹配的行(即相同的电话号码),并按产品名对结果进行分组。然后,它将每个产品的最新日期作为新的列最新日期返回。

    请注意,您需要根据实际的数据表结构调整上述SQL查询中的表名和字段名称。如果您正在使用的是SQL Server或其他支持窗口函数的语言,可能还需要使用不同的函数来计算最大日期。此外,对于更复杂的数据集,您可能需要使用聚合函数(如MAX)来处理多个产品的最大日期。

    如果你希望在Spark中实现这一功能,可以参考以下示例:

    from pyspark.sql import SparkSession
    import pandas as pd
    
    # 创建SparkSession
    spark = SparkSession.builder.appName('找出特定手机号码对应的产品名的最大日期').getOrCreate()
    
    # 加载数据到DataFrame
    df = spark.createDataFrame([
        (1, "高潜", "2014-02-02"),
        (1, "预审", "2014-02-03"),
        (1, "预审", "2014-02-04"),
        (1, "高潜", "2014-02-05"),
        (2, "高潜", "2014-02-06"),
        (2, "高潜", "2014-02-07"),
        (2, "高潜", "2014-02-08"),
        (3, "预审", "2014-02-09"),
        (3, "预审", "2014-02-10"),
        (3, "预审", "2014-02-11"),
        (3, "预审", "2014-02-12"),
        (3, "预审", "2014-02-13"),
        (3, "高潜", "2014-02-14"),
        (3, "高潜", "2014-02-15")
    ])
    
    # 使用pandas.DataFrame.from_pandas将DataFrame转换为Pandas DataFrame
    data = df.toPandas()
    
    # 确保产品名列已排序
    data.sort_values(by='产品名', inplace=True)
    
    # 计算每个产品名的最大日期
    max_dates = data.groupby('产品名')['日期'].transform('max')
    
    # 添加最大日期列
    data['最大日期'] = max_dates
    
    # 根据手机号筛选出符合条件的记录
    filtered_data = data[data['手机号'] == 1]
    
    # 获取每个手机号码的最高日期
    highest_date_per_phone = filtered_data[['产品名', '最大日期']].drop_duplicates().sort_values(by='最大日期', ascending=False).head(1)
    
    print(highest_date_per_phone)
    

    这段Python代码首先加载数据到Pandas DataFrame,然后按照产品名对数据进行排序,并计算每个产品的最大日期。接着,通过groupby操作找到每个产品的最高日期,并添加到DataFrame中。最后,根据手机号筛选出满足条件的记录,并获取每个手机号码的最高日期。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 8月8日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?