求不重复的字段并返回最新日期的SQL方法

简介: 有下面的一段原数据: KS_Date    KS_MetalName KS_TopLimit KS_BottomLimit KS_Average KS_Change 2011-12-14 00:00:00.

有下面的一段原数据:

KS_Date    KS_MetalName KS_TopLimit KS_BottomLimit KS_Average KS_Change
2011-12-14 00:00:00.000 a 100 10 55 54
2011-12-14 00:00:00.000 b 1 1 2 2
2011-12-14 00:00:00.000 c 1 1 10 1
2011-12-14 00:00:00.000 d 1 1 1 1
2011-12-14 00:00:00.000 e 1 1 1 1
2011-12-14 00:00:00.000 f 1 1 1 1
2011-12-14 00:00:00.000 g 1 1 1 1
2011-12-15 00:00:00.000 a 10 10 10 -45
2011-12-16 00:00:00.000 b 2 10 6 4
2011-12-16 00:00:00.000 c 2653 2001 2327 2317
2011-12-16 00:00:00.000 d 300 10 155 154
2011-12-16 00:00:00.000 e 200 100 150 149
2011-12-16 00:00:00.000 f 500 300 400 399
2011-12-16 00:00:00.000 g 5000 200 2600 2599
2011-12-23 00:00:00.000 a 20 10 15 5
2011-12-24 a 22 3 3 3
           
NULL NULL NULL NULL NULL NULL

1、求最新的日期并且KS_MetalName不重复

SELECT     MAX(KS_Date) AS 最新日期, KS_MetalName
FROM KS_U_SpotPrice
GROUP BY KS_MetalName

缺陷是无法返回多行记录,只能返回最多现行:KS_Date和KS_MetalName不能满足我们的要求

2、现在变通方法如下:

SELECT     KS_Date, KS_MetalName, KS_TopLimit, KS_BottomLimit, KS_Average, KS_Change
FROM KS_U_SpotPrice
WHERE (KS_Date IN
(SELECT MAX(KS_Date) AS AS最新日期
FROM KS_U_SpotPrice AS TempTable
GROUP BY KS_MetalName))
ORDER BY KS_MetalName

突然间发现上面这种方法也不能满足要求 ,但是下面的方法保证没有问题:

SELECT     ID, KS_Date, KS_MetalName, KS_TopLimit, KS_BottomLimit, did, username, userleavel
FROM test AS a
WHERE (KS_Date IN
(SELECT MAX(KS_Date) AS Expr1
FROM test AS b
WHERE (a.KS_MetalName = KS_MetalName)))
ORDER BY KS_MetalName


3、如果要是求今天最新的日期的返回值方法如下:

select KS_Date,KS_MetalName,KS_TopLimit,KS_BottomLimit,KS_Average,KS_Change
from KS_U_SpotPrice
where (DATEDIFF("d",KS_Date,GETDATE())=0)
order by KS_MetalName ASC



学习交流群:364976091
相关文章
|
26天前
|
SQL Java Scala
flink-cdc SQL Server op 字段如何获取?
Flink CDC 是 Apache Flink 的组件,用于捕获数据库变更事件。对 SQL Server,通过 Debezium 连接器支持变更数据捕获。`op` 字段标识操作类型(INSERT、UPDATE、DELETE)。配置包括添加依赖及设定 Source 连接器,可通过 Flink SQL 或 Java/Scala 完成。示例查询利用 `op` 字段筛选处理变更事件。
30 1
|
6天前
|
SQL JavaScript 前端开发
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
【Azure 应用服务】Azure JS Function 异步方法中执行SQL查询后,Callback函数中日志无法输出问题
|
2月前
|
JSON 数据格式 SQL
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
SQL开发问题之直接使用join方法在处理字符串类型属性时可能会遇到性能问题如何解决
|
2月前
|
SQL
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
|
13天前
|
SQL 移动开发 Oracle
SQL查询连续六天数据记录的技巧与方法
在数据库查询中,实现针对连续几天(如连续六天)的数据筛选是一个常见且稍具挑战性的任务
|
13天前
|
SQL Oracle 关系型数据库
SQL添加字段记录详解:技巧与方法实践
在数据库管理中,经常需要向表中添加新的字段(列)或向现有字段中插入新的记录(行)
|
2月前
|
SQL 机器学习/深度学习 分布式计算
MaxCompute产品使用合集之怎么使用SQL查询来获取ODPS中所有的表及字段信息
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2月前
|
SQL Oracle 关系型数据库
SQL查询结果导出方法详析及实践指南
导出SQL查询结果是数据库管理中的一个重要环节。不同的数据库系统提供了各自的工具和方法来完成这项任务。选择合适的方法取决于具体的应用场景、数据规模和个人偏好。无论是在命令行中使用简单的SQL语句,还是通过GUI工具或编程语言实现自动化脚本,都有助于提高工作效率,简化数据管理流程。
|
2月前
|
SQL 数据处理
SQL 能力问题之合并两个存在交叉的日期区间,如何解决
SQL 能力问题之合并两个存在交叉的日期区间,如何解决
|
2月前
|
SQL 存储 索引
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
MySQL设计规约问题之为什么应该把字段定义为NOT NULL并且提供默认值
下一篇
云函数