【问题标题】:MySQL - Subquery / JOIN same table different revision itemsMySQL - 子查询/加入同一张表不同的修订项目
【发布时间】:2018-02-24 14:28:23
【问题描述】:

我有这种mysql表:

data_store_id   data_field_id   data_record_id  data_record_revision_id value
13992   70  705 2332    fraus
13993   71  705 2332    john
13994   86  705 2332    
13995   87  705 2332    01/01/2020
13996   88  705 2332    1
13997   84  705 2332    10/10/2020
13998   85  705 2332    
13999   81  705 2332    1
14000   82  705 2332    
14001   83  705 2332    
14002   71  705 2333    nick
14003   87  705 2333    10/10/2015
14004   84  705 2333    
14005   71  705 2334    
14006   71  705 2335    peter
14007   86  705 2336    01/01/2012
14008   70  706 2337    liquorice
14009   71  706 2337    antony
14010   86  706 2337    
14011   87  706 2337    02/02/2150
14012   88  706 2337    1
14013   84  706 2337    01/01/1987
14014   85  706 2337    
14015   81  706 2337    1
14016   82  706 2337    
14017   83  706 2337    
14018   71  706 2338    dave
14019   87  706 2338    20/01/2011
14020   84  706 2338    
14021   71  706 2339    
14022   71  706 2340    winter
14023   86  706 2341    01/01/2012

我正在尝试编写查询以退出: 对于每个“data_record_id”,对于每个“data_field_id”,最后一个“data_record_revision_id”的“值”。 例如, 我需要得到类似的东西:

data_record_id  data_field_id_70    data_field_id_71    data_field_id_87
705 fraus   peter   10/10/2015
706 liquorice   winter  20/01/2011

有什么想法吗? 非常感谢

【问题讨论】:

  • data_field_id 的所有可能值是否已知?
  • @guigoz 是的,他们是众所周知的。 70、71、81、83、84、85、87、88
  • 有帮助吗?如果是,请点赞并采纳,谢谢
  • 太棒了!像魅力一样工作。打算进一步研究它

标签: mysql join subquery


【解决方案1】:
select
  data_record_id,
  max(case when data_field_id=70 then value end) data_record_id_70,
  max(case when data_field_id=71 then value end) data_record_id_71,
  max(case when data_field_id=87 then value end) data_record_id_87
from
 (select data_field_id,data_record_id,substring_index(group_concat(value order by data_record_revision_id desc separator '|'),'|',1) value
  from your_table
  group by data_record_id,data_field_id
 ) s
group by data_record_id

您必须为 data_field_id 的每个值重复 max(case when data_field_id=X then value end) data_record_id_X

第 1 步:select only one row per group
使用group_concatsubstring_index 获取data_record_revision_id 的最后一个值

设置 2:transpose rows to columns
将 data_field_id 转置为列

【讨论】:

    猜你喜欢
    • 2019-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多