Loading [MathJax]/jax/output/CommonHTML/config.js
社区首页 >问答首页 >SQL -棘手的合并

SQL -棘手的合并
EN

Stack Overflow用户
提问于 2019-10-22 08:44:48
回答 3查看 56关注 0票数 0

我面临着一个棘手的问题要做。我希望你的专业知识能帮助我解决这个问题。

有两个表:

Table1 :订单

代码语言:javascript
代码运行次数:0
复制
Index                 ProductName             OrderDate
0                      a                      03/03/1903
1                      a                      10/03/2014
2                      b                      01/01/2017
3                      c                      01/01/2019

Table2 :产品规格-->此表显示了我们产品的所有颜色变化

代码语言:javascript
代码运行次数:0
复制
Index         ProductName                    Color   ColorUpdatedOn
0                      a                     Blue     01/01/1900
1                      a                     Red      01/01/2014
2                      a                     Yellow   01/01/2017
3                      b                     Pink     01/01/2017
4                      c                     Black    01/01/2018
5                      c                     Black    31/12/2018

我希望能够使用Color et UpdatedOn列检索Table1中的所有数据

代码语言:javascript
代码运行次数:0
复制
Index   ProductName    OrderDate          Color   ColorUpdatedOn
0        a           03/03/1903           Blue     01/01/1900
1        a           10/03/2014           Red      01/01/2014
2        a           01/01/2019           Yellow   01/01/2017    
3        c           01/01/2019           Black    31/12/2018

你知道我是怎么做到的吗?

预先感谢您的帮助

拉戈

EN

回答 3

Stack Overflow用户

发布于 2019-10-22 08:57:38

根据颜色获取Product Specs表的max()日期,然后使用year()函数进行join,适用于mysqlmssql,其他数据库不确定。

代码语言:javascript
代码运行次数:0
复制
select o.Index, o.ProdcutName, o.Date, t1.color, t1.ColorUpdatedOn
from Orders o
inner join
    (select color, max(colorupdatedon) as ColorUpdatedOn 
    from productspecs
    group by color) t1 on year(o.OrderDate) = year(t1.createdon)

但我更喜欢使用right()函数,因为您的年份日期在末尾。

代码语言:javascript
代码运行次数:0
复制
select o.Index, o.ProdcutName, o.Date, t1.color, t1.ColorUpdatedOn
    from Orders o
    inner join
        (select color, max(colorupdatedon) as ColorUpdatedOn 
        from productspecs
        group by color) t1 on right(o.OrderDate, 4) = right(t1.createdon, 4)
票数 0
EN

Stack Overflow用户

发布于 2019-10-22 11:17:06

假设OrderDateColorUpdatedOn的数据类型都是date,我们可以找到订购时的颜色。为此,我使用了分析/窗口函数。Hive查询将如下所示:

代码语言:javascript
代码运行次数:0
复制
SELECT 
    y.ProductName, y.OrderDate, y.Color, y.ColorUpdatedOn
FROM (
    SELECT 
        x.*,
        DENSE_RANK() OVER(PARTITION BY x.ProductName, x.OrderDate ORDER BY x.recency ASC) AS relevance
    FROM (
        SELECT 
            a.*, b.color, b.ColorUpdatedOn, DATEDIFF(a.OrderDate, b.ColorUpdatedOn) AS recency
        FROM 
            Order a 
        INNER JOIN 
            Product b 
        ON (
            a.ProductName = b.ProductName
            AND a.OrderDate >= b.ColorUpdatedOn
        )
    ) x 
) y
WHERE 
    y.relevance = 1;

如果您让我知道您正在使用的数据库,查询可以是特定的。如果有帮助,请告诉我。

票数 0
EN

Stack Overflow用户

发布于 2019-10-22 11:35:10

在支持横向联接的数据库中(现在已经有相当多的横向联接),这非常简单:

代码语言:javascript
代码运行次数:0
复制
select o.*, s.*  -- select the columns you want
from orders o left join lateral
     (select s.*
      from specs s
      where s.ProductName = o.ProductName and
            s.ColorUpdatedOn <= o.OrderDate 
      order by s.ColorUpdatedOn desc
      fetch first 1 row only
     ) s
     on 1=1;

在SQL Server中,这将使用outer apply而不是left join lateral

在其他数据库中,我将使用lead()

代码语言:javascript
代码运行次数:0
复制
select o.*, s.*  -- select the columns you want
from orders o left join
     (select s.*,
             lead(ColorUpdatedOn) over (partition by ProductName order by ColorUpdatedOn) as next_ColorUpdatedOn
      from specs s
     ) s
     on s.ProductName = o.ProductName and
        o.OrderDate >= s.ColorUpdatedOn and
        (o.OrderDate < s.next_ColorUpdatedOn or s.next_ColorUpdatedOn is null)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58500348

复制
相关文章
Java反射探索-----从类加载说起
林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka
bear_fish
2018/09/20
5220
Java反射探索-----从类加载说起
枚举帮助类
1 using System; 2 using System.Collections.Generic; 3 using System.ComponentModel; 4 using System.Linq; 5 6 namespace EnumHelper 7 { 8 /// <summary> 9 /// 枚举帮助类 10 /// 1、获取枚举的描述文本 11 /// 2、获取枚举名和描述信息的列表 12 /// </summary> 13
用户6362579
2019/09/29
5380
日志帮助类
 1.代码 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using System.Configuration; using System.Reflection; namespace LogHelper.Common { public class LogHelper { private string logFile
用户1055830
2018/01/18
6520
日志帮助类
从源码角度学习JVM类加载器及自定义类加载器
负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,这个加载器是由C++写的,所以我们在java源码里面是找不到它的实现,如果尝试对它进行打印,输出将为空值。
AI码师
2022/12/22
3860
从源码角度学习JVM类加载器及自定义类加载器
内存泄漏 - 从Class类加载器说起
某公司技术人员针对企业应用系统12月10日内存溢出事件进行了广泛的技术探讨,并得到了一些建设性的建议和结论。
IT技术小咖
2019/09/24
2.9K0
内存泄漏 - 从Class类加载器说起
详细讲解!从JVM直到类加载器
整个过程是,x.java文件需要编译成x.class文件,通过类加载器加载到内存中,然后通过解释器或者即时编译器进行解释和编译,最后交给执行引擎执行,执行引擎操作OS硬件。
java技术爱好者
2020/09/22
4320
JVM | 从类加载到JVM内存结构
我在上篇文章:JVM | 基于类加载的一次完全实践 中为你讲解如何请“建筑工人”来做一些定制化的工作。但是,大型的Java应用程序时,材料(类)何止数万,我们直接堆放在工地上(JVM)上吗?相反,JVM有着一套精密的管理机制,来确保类的加载、验证、解析和初始化等任务能够有序且高效地完成。
kfaino
2023/10/02
2750
JVM | 从类加载到JVM内存结构
在成为CTO之前,程序员怎样赚外快?
作为一个码code的程序员,虽然可能没有朋友,比较宅,但是整体花销往往不比正常人少。VPS,域名,MAC还有一堆的收费软件,数码设备等,都是卖肾的节奏。 当然作为程序员,我们也可以有更多的赚钱姿势,如果你认为只有接私单,那么你就OUT了,我们看看有没有其他的方式呢? 私单 最理想的单子还是直接接海外的项目,比如freelance.com等网站。一方面是因为挣的是美刀比较划算,之前看到像给WordPress写支付+发送注册码这种大家一个周末就能做完的项目,也可以到200~300美刀;另一方面是在国外接单子比较
春哥大魔王
2018/04/16
1.8K0
原 数据接收和数据返回呈现,都用一个类代替
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; public class Record extends HashMap implements Map {     private static final lo
kinbug [进阶者]
2018/06/13
4500
Java类加载-加载
我们已经将整个Class的构成讲述完了,不清楚的同学可以看一下关于Class文件的介绍,但是空有Class并没有什么用,在Class中的各种描述信息都需要被加载到虚拟机以后才能运行使用。
shysh95
2021/02/25
1.3K0
Java类加载-加载
python 数据图表呈现
平时压力测试,生成一些数据后分析,直接看 log 不是很直观,前段时间看到公司同事分享了一个绘制图表python 模块 : plotly, 觉得很实用,利用周末时间熟悉下。
orientlu
2018/09/13
1.2K0
python 数据图表呈现
ajax请求完之前的loading加载
很多时候我们需要引入框架来开发项目,这时我们可能会遇到页面还没加载完源码出来了的问题,给用户一种不好的视觉体验,这是便需要loading加载了,来完善用户体验!
ProsperLee
2018/10/24
1.5K0
ajax请求完之前的loading加载
DevExpress数据绑定呈现
数据库这里为了方便演示,用的SQL Server 由于我数据库中的表有8列数据,这里添加8列,并设置列名和绑定的数据名称:
别团等shy哥发育
2023/02/27
1.6K0
DevExpress数据绑定呈现
类加载
其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。
码农戏码
2021/03/23
4980
类加载
我们知道在运行Java程序时,首先需要把源代码编译成二进制文件也就是class文件,然后虚拟机才能执行。那虚拟机在执行class文件时,都进行了哪些步骤呢。下面我们将详细分享一下。当类也就是class文件被加载到虚拟机内存开始,到卸载出内存为止。它将要执行以下7个步骤:
吉林乌拉
2019/08/14
4970
类加载
启动类加载器,Bootstrap ClassLoader,加载JACA_HOME\lib,或者被-Xbootclasspath参数限定的类 扩展类加载器,Extension ClassLoader,加载\lib\ext,或者被java.ext.dirs系统变量指定的类 应用程序类加载器,Application ClassLoader,加载ClassPath中的类库 自定义类加载器,通过继承ClassLoader实现,一般是加载我们的自定义类
葆宁
2019/04/18
4850
类加载
【Android 逆向】类加载器 ClassLoader ( 启动类加载器 | 扩展类加载器 | 应用类加载器 | 类加载的双亲委托机制 )
类加载器加载类流程 : Bootstrap ClassLoader 先加载系统的核心类库 , Extention ClassLoader 加载额外的 /lib/ext 类库 , Application ClassLoader 加载开发者自己开发的类库 ;
韩曙亮
2023/03/30
8920
从ng1看ng2 关于NgModule的简易归纳
最近开始折腾ng2,其实说是ng2,到目前为止,它已经发布了4.3版,就是这么的高产,高产似*,我连2都还木有完整的看完它竟然发布了4.的版本(鄙视脸)。
littlelyon
2018/10/19
9550
写一个Foreach帮助类,在razor中使用
esterday, during my ASP.NET MVC 3 talk at Mix 11, I wrote a useful helper method demonstrating an advanced feature of Razor, Razor Templated Delegates.
javascript.shop
2019/09/04
4980
jvm怎么加载类_jvm类加载器
原因: 1、存放在自定义路径上的类,需要通过自定义类加载器去加载。【注意:AppClassLoader加载classpath下的类】 2、类不一定从文件中加载,也可能从网络中的流中加载,这就需要自定义加载器去实现加密解密。 3、可以定义类的实现机制,实现类的热部署, 如OSGi中的bundle模块就是通过实现自己的ClassLoader实现的, 如tomcat实现的自定义类加载模型。
全栈程序员站长
2022/10/29
4670

相似问题

Shell脚本在特定单词之后打印一定数量的单词

34

在shell脚本中从文件中选择特定的单词

20

在特定单词之后提取单词

30

在shell脚本中搜索特定的单词

34

PHP在某个单词之后选择单词

25
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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