当前位置: 首页 > 知识库问答 >
问题:

sql语句怎么取每种物料的第一行数据?

宋经业
2024-10-11

库存的明细表,我用sql汇总了库存量,然后按生产日期排序。我可以怎么取每只物料的第一行数据。

物料名称 日期 库存量
A 2024-10-07 50
A 2024-10-09 49
A 2024-10-10 48
B 2024-10-02 49
B 2024-10-06 49

请问大佬们,我怎么取7号的A, 2号的B

共有3个答案

秦禄
2024-10-11

SELECT "物料名称", any_value("日期") as "日期", any_value("库存量") as "库存量" FROM 表名 group by "物料名称"

杨君之
2024-10-11

以下内容来自 AI


在SQL中,你可以使用GROUP BYORDER BY语句来实现你的需求。但是,直接选择每个分组的第一条数据需要一些额外的逻辑,因为SQL标准本身不提供直接选择每个分组第一条记录的方法。

以下是一些常见的数据库系统中实现这个需求的方法:

1. 使用窗口函数(如ROW_NUMBER())

如果你的数据库支持窗口函数,你可以使用ROW_NUMBER()来为每个分组内的记录分配一个序号,然后选择序号为1的记录。

SELECT *
FROM (
    SELECT *,
           ROW_NUMBER() OVER (PARTITION BY 物料名称 ORDER BY 生产日期 ASC) AS rn
    FROM 你的表名
) AS subquery
WHERE rn = 1;

这里,ROW_NUMBER()函数为每个物料名称的分组内的记录分配一个序号,序号是根据生产日期升序排列的。外层的查询则选择序号为1的记录。

2. 使用聚合函数和子查询

如果你的数据库不支持窗口函数,你可以使用子查询和聚合函数来实现。

SELECT *
FROM 你的表名 AS a
WHERE (物料名称, 生产日期) IN (
    SELECT 物料名称, MIN(生产日期)
    FROM 你的表名
    GROUP BY 物料名称
);

这个查询首先找出每个物料名称分组的最小生产日期,然后从原表中选择这些记录。

3. 使用自连接

另一种方法是使用表的自连接来找到每个分组的第一条记录。

SELECT a.*
FROM 你的表名 a
LEFT JOIN 你的表名 b
ON a.物料名称 = b.物料名称 AND a.生产日期 > b.生产日期
WHERE b.物料名称 IS NULL;

这个查询通过自连接找到每个物料名称的更早记录,然后选择那些没有更早记录的记录(即每个分组的第一条记录)。

请根据你的具体数据库系统和表结构调整这些查询。如果你需要更具体的帮助,请提供数据库类型和表结构的详细信息。

宋烨烁
2024-10-11

分组、编号、筛选

select * from (

   select  * , row_number()over(partition by 物料  order by 日期  ) as 编号                from 表 ) as bb where bb.编号='1'
 类似资料:
  • 这是记录用户下载的表,想统计表内每个文章被下载了几次,也就是需要拿到一个文章ID,然后再求下这个ID出现的次数。

  • 我有一个熊猫,如下所示: 我想按进行分组并获取每个组的第一行: 预期成果: 我尝试了下面的方法,它只给出了< code>DataFrame的第一行。任何关于这方面的帮助都将不胜感激。

  • 我读了很多线程,但没有得到正确的解决我的问题。和这根线不相上下 这是基于一个包含大量表和机器值的非常大的数据库。我选择了我感兴趣的列,并通过它们的内置表ID将它们链接起来。现在,我必须减少我的结果,我得到了许多相同值的行,只是ID改变了。我只需要一(第一)行的“tph.tph_id”与像这样的机制 或者类似这样的东西。到目前为止,我无法实现适当的子查询或使用SQL函数。您的帮助将非常感谢。结果如下

  • 目录 13.1. 数据定义语句 13.1.1. ALTER DATABASE语法 13.1.2. ALTER TABLE语法 13.1.3. CREATE DATABASE语法 13.1.4. CREATE INDEX语法 13.1.5. CREATE TABLE语法 13.1.6. DROP DATABASE语法 13.1.7. DROP INDEX语法 13.1.8. DROP TABLE语法

  • 导语 SQL即结构化查询语言,是关系数据库的标准语言。前面两节中已经在Qt里利用QSqlQuery类执行了SQL语句,这一节我们将详细讲解该类的使用。需要说明,因为我们重在讲解Qt中的数据库使用,而非专业的讲解数据库知识,所以不会对数据库中的一些知识进行深入讲解。 环境:Windows Xp + Qt 4.8.4+Qt Creator2.6.2 目录 一、创建数据库连接 二、操作结果集 三、在SQ

  • 本文向大家介绍oracle中得到一条SQL语句的执行时间的两种方式,包括了oracle中得到一条SQL语句的执行时间的两种方式的使用技巧和注意事项,需要的朋友参考一下 oracle中如果需要得到一条SQL语句的执行时间可以用如下2种方式