>>600 Pharo/Squeak Smalltalk

| data dic |

data := {
#A -> #('2019/07/05' '2019/07/10' '2019/07/15' '2019/07/20').
#B -> #('2019/07/08' '2019/07/10' '2019/07/20').
#C -> #('2019/07/15' '2019/07/20' '2019/07/25')
}.

dic := Dictionary new.
data do: [:assoc |
assoc value do: [:date | (dic at: date ifAbsentPut: [OrderedCollection new]) add: assoc key].
].
dic associations sort
select: [:assoc | assoc value size >= 2]
thenCollect: [:assoc | assoc value: assoc value asArray]


"=> {'2019/07/10'->#(#A #B) . '2019/07/15'->#(#A #C) . '2019/07/20'->#(#A #B #C)} "