首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有关联接查询和返回限制的帮助

有关联接查询和返回限制的帮助
EN

Stack Overflow用户
提问于 2011-02-24 19:48:15
回答 2查看 246关注 0票数 2

我的数据库中有两个表- gl_weather_locations和gl_weather_data。

我需要从locations表中选择位置名称、纬度和经度,然后只获取数据表中相应经度/纬度的最新记录集-可以有多个记录集,因为数据库是由每2小时更新一次的web服务填充的。我们需要保存档案数据,所以我们不能只保留最近的一组记录,我们需要保留所有的记录。但是我有点困惑于如何将我的查询限制在最近的集合(每个位置有3个数据记录的倍数-一个关于风速,一个关于风向,一个关于海浪高度-我们需要获得所有三个中的最新的)。

到目前为止,我所拥有的是:

代码语言:javascript
运行
AI代码解释
复制
SELECT l.location_name, l.location_lat, l.location_long, d.weather_type, 
       d.weather_value, d.weather_unit
FROM gl_weather_locations l
LEFT JOIN gl_weather_data d ON l.location_lat = d.weather_lat

(在我们的例子中,我们使用的位置是有限的,并且绝对确认我们没有多个位置具有完全相同的纬度,因此我们可以安全地只在纬度上进行连接,而不需要同时比较经度。)

我对如何确保只获得每个纬度的最新记录集感到困惑。如果有帮助,一个集合中的所有记录的weather_time字段都是相同的(即我们有10个位置,每个web服务的每个位置有3个记录,所以我们有30个记录在weather_time中具有相同的值)。我能以某种方式在order by或group by之类的地方使用它吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-24 20:56:19

第二个FROM (通过SQL-Select)应该会让你得到每一个经度/经度,每个类别各自的最大时间。然后,整个查询将位置链接到那个(MaxTimes)别名,然后根据与要测试的各个分类单元匹配的最大时间重新连接到天气数据。如果得到任何null值,只需将这些列包装为NVL( whatever_column,'‘)作为ResultColumn即可

代码语言:javascript
运行
AI代码解释
复制
select WLoc.ID,
       WLoc.Location_Name,
       WLoc.Location_Lat,
       WLoc.Location_Long,
       IFNULL( MaxTimes.WindDirTime, '' ) WindDirTime,       
       IFNULL( MaxTimes.WindSpdTime, '' ) WindSpdTime,       
       IFNULL( MaxTimes.WaveHeightTime, '' ) WaveHeightTime,       
       IFNULL( ByWindDir.Weather_Unit, '' ) WindDirection,       
       IFNULL( ByWindDir.Weather_Value, '' ) WindDirValue,       
       IFNULL( ByWindSpd.Weather_Unit, '' )  SpeedUnit,       
       IFNULL( ByWindSpd.Weather_Value, '' )  WindSpeed,       
       IFNULL( ByWaveHeight.Weather_Unit, '' )  WaveUnit,       
       IFNULL( ByWaveHeight.Weather_Value, '' )  WaveHeight
  from
     gl_weather_locations WLoc
        left join (select weather_lat,
                          weather_long,
                          max( case when weather_type = "Wind Direction" then weather_time end ) WindDirTime,
                          max( case when weather_type = "Wind Speed" then weather_time end ) WindSpdTime,
                          max( case when weather_type = "Wave Height" then weather_time end ) WaveHeightTime
                      from
                          gl_weather_data
                      group by 
                          1, 2 ) MaxTimes
             on WLoc.Location_Lat = MaxTimes.Weather_Lat
            and WLoc.Location_Long = MaxTimes.Weather_Long

                 left join gl_weather_data ByWindDir
                    on MaxTimes.weather_lat = ByWindDir.weather_lat
                    and MaxTimes.weather_long = ByWindDir.weather_long
                    and MaxTimes.WindDirTime = ByWindDir.weather_time
                    and ByWindDir.weather_type = "Wind Direction"

                 left join gl_weather_data ByWindSpd
                    on MaxTimes.weather_lat = ByWindSpd.weather_lat
                    and MaxTimes.weather_long = ByWindSpd.weather_long
                    and MaxTimes.WindSpdTime = ByWindSpd.weather_time
                    and ByWindSpd.weather_type = "Wind Speed"

                 left join gl_weather_data ByWaveHeight
                    on MaxTimes.weather_lat = ByWaveHeight.weather_lat
                    and MaxTimes.weather_long = ByWaveHeight.weather_long
                    and MaxTimes.WaveHeightTime = ByWaveHeight.weather_time
                    and ByWaveHeight.weather_type = "Wave Height"

第一个FROM表是您的主位置列表...通过执行左连接,您将告诉SQL,无论右侧是否有时间戳匹配,都要显示所有位置。

接下来是MaxTimes的PreQuery。可以将此子查询看作是预先收集每个经纬度/经度的最大时间,以及通过MAX报告的每个测量类型的最大时间。)作为FinalColumnName。因此,在每条记录上,它将仅符合这些案例条目中的一个,如果找到,则获取该列的最大时间。

现在,您有了一个位置列表,并在各自的LAT/LONG上联接子查询MaxTimes。现在,MaxTimes查询正在对度量数据执行三次左连接,分别针对每个度量,所以我已经根据它们的用途对它们进行了别名。因此出现了ByWindDir、ByWindSpd和ByWaveHeight。与其他连接一样,左连接基于经纬度,其相应的类型("Wind Direction“、"Wind Speed”或"Wave Height"),并且具有与该类别相同的匹配时间。

这个查询的好处是,如果您的时间到达单个经度/经度位置都是关闭的,即使以秒为单位(即:风向为11:58:02,风速为11:58:05,波高= 11:58:54 ),它仍将遵守每个唯一测量的最大时间。

最后,字段列表...为了把所有的东西都钉在一行上,我得到了显而易见的细节...由于每个表都被联接来表示它自己的“内容”,所以我用列名表示上下文……希望这能帮助你理解这个查询……一次选择一个部分,找出什么链接到什么。

票数 2
EN

Stack Overflow用户

发布于 2011-02-24 19:52:03

尝试:

代码语言:javascript
运行
AI代码解释
复制
SELECT l.location_name, l.location_lat, l.location_long, 
       d.weather_type, d.weather_value, d.weather_unit FROM gl_weather_locations l 
LEFT JOIN gl_weather_data d on l.location_lat = d.weather_lat 
**order by weather_time desc limit 3**
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5109666

复制
相关文章
使用联接和子查询来查询数据
--Chapter 3 使用联接和子查询来查询数据 --内容提要 go /* (一)、使用联接查询数据 1. 内联接 2. 外联接 3. 交叉联接 4. 等值联接 5. 自联接 */ go /* (二)、使用子查询查询数据 1. 使用比较运算符,IN和EXISTS关键字 2. 使用修改过的比较运算符 3. 使用聚合函数 4. 使用嵌套子查询 5. 使用关联子查询 6. APPLY运算符 */ go /* (三)、管理结
赵腰静
2018/03/09
2.3K0
SQL语句汇总(终篇)—— 表联接与联接查询
既然是最后一篇那就不能只列出些干枯的标准语句,更何况表联接也是SQL中较难的部分,所以此次搭配题目来详细阐述表联接。
_DIY
2020/05/29
1.5K0
SQL语句汇总(终篇)—— 表联接与联接查询
有关snprintf返回值
有关snprintf返回值更多信息,请参考:http://bbs.hadoopor.com/thread-1185-1-1.html
一见
2018/08/07
1.4K0
限制 SQL 返回行
您可以通过特定的行数或行的百分比来限制从 SQL 查询返回的行。在某些情况下,您可能需要在返回的行数受到限制之前对查询结果进行排序。
Yunjie Ge
2023/09/01
2380
限制 SQL 返回行
与数据挖掘有关或有帮助的R包和函数的集合
rpart,party,randomForest,rpartOrdinal,tree,marginTree,
IT阅读排行榜
2018/08/13
8570
【T-SQL基础】02.联接查询
概述: 本系列【T-SQL基础】主要是针对T-SQL基础的总结。 本篇主要是对多表查询基础的总结。 查询语句的FROM字句在逻辑上是第一条要处理的字句,在FROM字句内可以用表运算符对输入的表进行操作
悟空聊架构
2018/05/18
3K0
【学习】干货:与数据挖掘有关或有帮助的R包和函数的集合
与数据挖掘有关或者有帮助的R包和函数的集合。 1、聚类 常用的包: fpc,cluster,pvclust,mclust 基于划分的方法: kmeans, pam, pamk, clara 基于层次的方法: hclust, pvclust, agnes, diana 基于模型的方法: mclust 基于密度的方法: dbscan 基于画图的方法: plotcluster, plot.hclust 基于验证的方法: cluster.stats 2、分类 常用的包: rpart,party,randomFo
小莹莹
2018/04/23
1.1K0
【学习】干货:与数据挖掘有关或有帮助的R包和函数的集合
最简单的 MyBatis Plus 的多表联接、分页查询实现方法
最近在加强 ITAEM 团队的一个 app 项目——学生教师学习交流平台 人员组成:安卓 + 前端 + 后台 后台 DAO 层借鉴了华工其他软件开发团队,使用了新颖强大的 MyBatisPlus 框架,里边有一个类似百度贴吧的发帖子的功能:
全栈程序员站长
2022/09/04
10K1
最简单的 MyBatis Plus 的多表联接、分页查询实现方法
Java 中如何限制方法的返回时间
可以使用 JDK 中的 ExecutorService 方法来对调用的方法进行处理。
HoneyMoose
2023/02/10
3.1K0
Java 中如何限制方法的返回时间
用于查询的日期类型转换帮助类
本文转载:http://www.cnblogs.com/iamlilinfeng/p/3378659.html
跟着阿笨一起玩NET
2018/09/19
8120
用于查询的日期类型转换帮助类
python mysqldb 查询返回字
MySQLdb默认查询结果都是返回tuple,输出时候不是很方便,必须按照0,1这样读取,无意中在网上找到简单的修改方法,就是传递一个cursors.DictCursor就行。 默认程序: import MySQLdb db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test') cursor = db.cursor() cursor.execute('select * from user') rs = cursor.fetchall() print rs # 返回类似如下 # ((1000L, 0L), (2000L, 0L), (3000L, 0L)) 修改后: import MySQLdb import MySQLdb.cursors db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test',cursorclass = MySQLdb.cursors.DictCursor) cursor = db.cursor() cursor.execute('select * from user') rs = cursor.fetchall() print rs # 返回类似如下 # ({'age': 0L, 'num': 1000L}, {'age': 0L, 'num': 2000L}, {'age': 0L, 'num': 3000L}) 或者也可以用下面替换connect和cursor部分 db = MySQLdb.connect(host = 'localhost', user = 'root', passwd = '123456', db = 'test') cursor = conn.cursor(cursorclass = MySQLdb.cursors.DictCursor)
py3study
2020/01/09
1.1K0
python查询mysql,返回json
import MySQLdb import json def getSql(): try: con = MySQLdb.connect(host='localhost', user='', passwd='', db='test', charset='utf8') cursor = con.cursor() sql = "select * from user" cursor.execute(sql)
py3study
2020/01/10
3.6K0
编写 SQL 的排除联接
有两个表,就叫源表和目标表吧。它们有一个相同的字段,通过该字段可以把源表和目标表关联在一起,我们希望从源表中检索到的记录里的关联字段的值没有存在目标表中。举个例子,源表 dept,目标表 emp,获取 dept 表中部门编号不在 emp 表中的记录。在检查两张表的数据后,我们发现 emp 表中没有部门编号 40 的数据。
白日梦想家
2020/07/20
1.3K0
编写 SQL 的排除联接
MySQL 中 delete 语句的子查询限制
场景一 delete from student where id = (select max(id) from student); [Err] 1093 - You can't specify target table 'student' for update in FROM clause 描述: 如果子查询的 from 子句和更新、删除对象使用同一张表,会出现上述错误。 解决方法: 通过给 from 子句中的结果集起别名。 delete from student where id = (select n
用户1212940
2022/04/13
3.8K0
【机械蛮力和人类智能】符号主义和联接主义的魔咒
人工智能领域的主要思想流派大致可以分为符号主义和联接主义。两种方法具有完全不同的哲学观点,计算方法和适用范围。两者都有着令人叹为观止的壮丽恢弘,也都有着自身难以打破的魔咒。 联接主义的代表自然是神经网络(artifical neural nework),实质上是来自于人类大脑神经网络的计算机模拟。每个神经元细胞具有树突,轴突和细胞体。树突可以接收信号,轴突用于输出信号,不同细胞的树突和轴突之间是神经突触,不同的突触具有不同的权重。树突传入的信号强度与相应的突触权重相乘,经由细胞体设置的非线性阈值检验,触发轴
新智元
2018/03/13
1K0
有关operator的precedence和associativity
2. 表达式的计算就是对这些运算符的计算(运算符的计算对象就是其操作码),所有计算的结果作为该表达式的结果
KINGYT
2023/03/15
3500
有关operator的precedence和associativity
Druid 查询返回引擎版本困惑的地方
在早期是可以通过设置查询参数来进行设计的,如果你使用的是 Druid 的新版本的话,默认都会使用引擎 V2。
HoneyMoose
2021/07/31
5410
Druid 查询返回引擎版本困惑的地方
MongoDB(13)- 查询操作返回指定的字段
答案是不能的,如果想指定 <projection> 是包含字段,那所有字段值都得统一是 1,相反如果是不包含,也必须都是 0
小菠萝测试笔记
2021/06/10
6.5K0
点击加载更多

相似问题

有关MySQL联接的帮助

10

寻找有关在CodeIgniter中联接查询的帮助

12

需要有关SQL查询的帮助(自联接)

11

联接查询帮助

21

联接查询的帮助

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档