首页 \ 问答 \ 如何按某些字段分组并在oracle中显示另一个字段的第一个值?(How to group by some fields and display the first value of another field in oracle?)

如何按某些字段分组并在oracle中显示另一个字段的第一个值?(How to group by some fields and display the first value of another field in oracle?)

这是我在分组后看到的表格:

DATE:       TEST:   BUILD:  NUM:
17-FEB-14   testA   BUILDA  100
18-FEB-14   testA   BUILDA  20
20-FEB-14   testA   BUILDB  120

我按TEST,BUILD AND DATE进行分组。 这里的问题是,测试A在BUILDA上的一些子测试恰好是在2014年1月17日,有些是在2014年1月18日。 这会将与record1和record2相同的记录拆分。

我需要的只是第一次约会的总数:

DATE:       TEST:   BUILD:  NUM:
17-FEB-14   testA   BUILDA  120
20-FEB-14   testA   BUILDB  120

有什么办法可以实现吗?

查询很长,因此不会发布完整的查询。 但它看起来像:

SELECT r.RN_EXECUTION_DATE, t.TESTSETNAME, r.RN_BUILD_VERSION, r.rn_status, 
 COUNT(r.rn_run_id) AS run_count
 FROM table t, table r, (.........) tlf
 WHERE (........)

GROUP BY t.TESTSETNAME,
  r.RN_BUILD_VERSION,
  r.RN_EXECUTION_DATE,
  r.rn_status

ORDER BY t.TESTSETNAME,
  r.RN_BUILD_VERSION  
;

提前感谢,Manoj


Here is the table which I am looking at after grouping:

DATE:       TEST:   BUILD:  NUM:
17-FEB-14   testA   BUILDA  100
18-FEB-14   testA   BUILDA  20
20-FEB-14   testA   BUILDB  120

I am grouping by TEST, BUILD AND DATE. Problem here is, some of the subtests on testA on BUILDA, happened to be on 17Feb14, where as some are on 18Feb14. This splits up the same record as record1 and record2.

What I need is just the total with the first date:

DATE:       TEST:   BUILD:  NUM:
17-FEB-14   testA   BUILDA  120
20-FEB-14   testA   BUILDB  120

Is there any way I could achieve this?

The query is a very long one, hence not posting the complete query. But it looks like:

SELECT r.RN_EXECUTION_DATE, t.TESTSETNAME, r.RN_BUILD_VERSION, r.rn_status, 
 COUNT(r.rn_run_id) AS run_count
 FROM table t, table r, (.........) tlf
 WHERE (........)

GROUP BY t.TESTSETNAME,
  r.RN_BUILD_VERSION,
  r.RN_EXECUTION_DATE,
  r.rn_status

ORDER BY t.TESTSETNAME,
  r.RN_BUILD_VERSION  
;

Thanking in advance, Manoj


原文:https://stackoverflow.com/questions/27207191
更新时间:2022-08-26 19:08

最满意答案

分解:你想要的第一件事是产品名称:

SELECT Product_Name FROM Products

我们如何获得该类别? 加入吧!

SELECT Products.Product_Name, Categories.Category_Name 
FROM Products JOIN Categories ON Products.Category_Id = Categories.Category_Id

越来越接近! 是时候引入订单历史了:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id

现在我们可以引入名称,并过滤到John:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
JOIN Customers ON Sells.Customer_Id = Customers.Customer_Id
WHERE Customers.Customer_Name = 'John'

只要在脑海中一步一步。 随时随地构建每个部分的查询。

既然你提到了......

LEFT JOIN是您处理缺失数据的方式。 它返回“left”表中的行,如果ON子句不匹配,则将NULL放在“right”表的字段中。

例如,如果John购买了没有类别的Product( Product.Category_IdNULL ),则使用JOIN将不会返回该购买记录,因为没有与Category_Id Null匹配的Category。 在这种情况下,您可以LEFT JOIN Categories ,在结果集中, Category_Name也将为NULL


Break it down: THe first thing you want is a Product Name:

SELECT Product_Name FROM Products

How do we get the category? Join it in!

SELECT Products.Product_Name, Categories.Category_Name 
FROM Products JOIN Categories ON Products.Category_Id = Categories.Category_Id

Getting close! Time to bring in the order history:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id

Now we can bring in the name, and filter to John:

SELECT Products.Product_Name, Categories.Category_Name, Sells.Sells_Date 
FROM Products 
JOIN Categories ON Products.Category_Id = Categories.Category_Id
JOIN Sells ON Sells.Sells_Id = Products.Product_Id
JOIN Customers ON Sells.Customer_Id = Customers.Customer_Id
WHERE Customers.Customer_Name = 'John'

Just take it one step at a time in your mind. Build the query from each part as you go.

Since you mentioned it...

LEFT JOIN is how you deal with missing data. It returns rows from the "left" table, and puts NULL in the fields of the "right" table if there is no match for the ON clause.

For example, if John bought a Product with no category (Product.Category_Id was NULL), using a JOIN would not return that record of purchase because there was no matching Category with Category_Id Null. In that case, you could LEFT JOIN Categories and in the result set, Category_Name would be NULL as well.

相关问答

更多

相关文章

更多

最新问答

更多
  • python的访问器方法有哪些
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。
  • 响应navi重叠h1和nav上的h1链接不起作用(Responsive navi overlaps h1 and navi links on h1 isn't working)
  • 在C中读取文件:“r”和“a +”标志的不同行为(Reading a File in C: different behavior for “r” and “a+” flags)
  • NFC提供什么样的带宽?(What Kind of Bandwidth does NFC Provide?)
  • 元素上的盒子阴影行为(box-shadow behaviour on elements)
  • Laravel检查是否存在记录(Laravel Checking If a Record Exists)
  • 设置base64图像的大小javascript - angularjs(set size of a base64 image javascript - angularjs)
  • 想学Linux 运维 深圳有哪个培训机构好一点
  • 为什么有时不需要在lambda中捕获一个常量变量?(Why is a const variable sometimes not required to be captured in a lambda?)
  • 在Framework 3.5中使用服务器标签<%=%>设置Visible属性(Set Visible property with server tag <%= %> in Framework 3.5)
  • AdoNetAppender中的log4net连接类型无效(log4net connection type invalid in AdoNetAppender)
  • 错误:发送后无法设置标题。(Error: Can't set headers after they are sent. authentication system)
  • 等待EC2实例重启(Wait for an EC2 instance to reboot)
  • 如何在红宝石中使用正则表达式?(How to do this in regex in ruby?)
  • 使用鼠标在OpenGL GLUT中绘制多边形(Draw a polygon in OpenGL GLUT with mouse)
  • 江民杀毒软件的KSysnon.sys模块是什么东西?
  • 处理器在传递到add_xpath()或add_value()时调用了什么顺序?(What order are processors called when passed into add_xpath() or add_value()?)
  • sp_updatestats是否导致SQL Server 2005中无法访问表?(Does sp_updatestats cause tables to be inaccessible in SQL Server 2005?)
  • 如何创建一个可以与持续运行的服务交互的CLI,类似于MySQL的shell?(How to create a CLI that can interact with a continuously running service, similar to MySQL's shell?)
  • AESGCM解密失败的MAC(AESGCM decryption failing with MAC)
  • SQL查询,其中字段不包含$ x(SQL Query Where Field DOES NOT Contain $x)
  • PerSession与PerCall(PerSession vs. PerCall)
  • C#:有两个构造函数的对象:如何限制哪些属性设置在一起?(C#: Object having two constructors: how to limit which properties are set together?)
  • 平衡一个精灵(Balancing a sprite)
  • n2cms Asp.net在“文件”菜单上给出错误(文件管理器)(n2cms Asp.net give error on Files menu (File Manager))
  • Zurb Foundation 4 - 嵌套网格对齐问题(Zurb Foundation 4 - Nested grid alignment issues)
  • 湖北京山哪里有修平板计算机的