首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何比较MySql中的初始记录和最新记录

如何比较MySql中的初始记录和最新记录
EN

Stack Overflow用户
提问于 2019-12-21 17:39:58
回答 1查看 35关注 0票数 0

我试图在同一个查询中连接以下三个表,并试图获取状态基础的初始值和最终值。

Table1

代码语言:javascript
复制
ID1        Date1                      Value1
T-1        2019-12-15 12:14:13        10000
T-2        2019-12-15 16:17:24        11000
T-3        2019-12-17 10:01:11        15000
T-4        2019-12-18 21:10:21        17000

Table2

代码语言:javascript
复制
ID2        Date2                      Value2    Seq
T-1        2019-12-16 19:18:11        10000     1
T-2        2019-12-16 16:33:24        12000     1
T-2        2019-12-17 15:21:21        12000     2
T-2        2019-12-17 13:10:18        18000     3
T-2        2019-12-18 19:18:07        11000     4
T-3        2019-12-17 11:11:11        14000     1
T-3        2019-12-18 22:18:08        13000     2
T-3        2019-12-18 19:07:01        13000     3
T-4        2019-12-19 21:38:15        17000     1
T-4        2019-12-19 21:45:20        17000     2

Table3

代码语言:javascript
复制
ID3         Date3                     Value3
T-1        2019-12-16 19:18:11        10000 
T-2        2019-12-18 19:18:07        11000
T-3        2019-12-18 19:07:01        13000
T-4        2019-12-19 21:45:20        17000

显然,Table3包含最新的记录,因此我希望使用上面的表导出下面提到的详细信息:

  • 如果Value2Seq=1小于或大于Value1,则将其显示为FALSE
  • 获取初始日期,其中Seq=1和每个唯一的ID的最新日期

所需产出:

代码语言:javascript
复制
ID3     Value1        Value3          Initial_Date           Latest_Date           Status
T-1     10000         10000           2019-12-16 19:18:11    2019-12-16 19:18:11   TRUE
T-2     11000         12000           2019-12-16 16:33:24    2019-12-18 19:18:07   FALSE
T-3     15000         14000           2019-12-17 11:11:11    2019-12-18 19:07:01   FALSE
T-4     17000         17000           2019-12-19 21:38:15    2019-12-19 21:45:20   TRUE

我尝试过以下查询,但没有成功: MySQL版本是5.7.25

代码语言:javascript
复制
select ID3,Value1, Value2, Date2 As Initial_Date, Date3 As Final_Date
from Table1 t1
Left Join Table2 t2 on t1.ID1=t2.ID2
Left Join Table3 t3 on t2.ID2=t3ID3
where t2.Seq=1
group by t3.ID3;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 18:08:27

对于这个示例数据,您所要做的就是从查询中删除group by子句,并删除Status列,如下所示:

代码语言:javascript
复制
select t3.ID3, t1.Value1, t2.Value2, 
  t2.Date2 As Initial_Date, t3.Date3 As Final_Date, 
  t1.Value1 = t2.Value2 Status
from Table1 t1
Left Join Table2 t2 on t1.ID1=t2.ID2
Left Join Table3 t3 on t2.ID2=t3.ID3
where t2.Seq = 1

如果希望Status列为TRUEFALSE

代码语言:javascript
复制
select t3.ID3, t1.Value1, t2.Value2, 
  t2.Date2 As Initial_Date, t3.Date3 As Final_Date, 
  case when t1.Value1 = t2.Value2 then 'TRUE' else 'FALSE' end Status
from Table1 t1
Left Join Table2 t2 on t1.ID1=t2.ID2
Left Join Table3 t3 on t2.ID2=t3.ID3
where t2.Seq = 1

演示

结果:

代码语言:javascript
复制
> ID3 | Value1 | Value2 | Initial_Date        | Final_Date          | Status
> :-- | -----: | -----: | :------------------ | :------------------ | :-----
> T-1 |  10000 |  10000 | 2019-12-16 19:18:11 | 2019-12-16 19:18:11 | TRUE  
> T-2 |  11000 |  12000 | 2019-12-16 16:33:24 | 2019-12-18 19:18:07 | FALSE 
> T-3 |  15000 |  14000 | 2019-12-17 11:11:11 | 2019-12-18 19:07:01 | FALSE 
> T-4 |  17000 |  17000 | 2019-12-19 21:38:15 | 2019-12-19 21:45:20 | TRUE  

另外,由于您有where t2.Seq = 1,所以到Table2的连接是内部连接,而不是左连接。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59438452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档