0

I have this kind of mysql table:

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

I'm trying to write a query to get out: for each "data_record_id", for each "data_field_id", last "data_record_revision_id"'s "value"s. For example, i'd need to get something like:

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

any ideas? Thanks a lot

Gotrekk
  • 494
  • 2
  • 15

1 Answers1

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

you will have to repeat max(case when data_field_id=X then value end) data_record_id_X for every value of data_field_id

step 1: select only one row per group
get the last value of data_record_revision_id with group_concat and substring_index

setp 2: transpose rows to columns
transpose data_field_id to columns

guigoz
  • 674
  • 4
  • 21