My question might be similar to these questions:
- MySQL group by with ordering/priority of another column
- Grouping by Column with Dependence on another Column
- MySQL GROUP BY with preference
Table Example:
source  zip     phone   street              city        created_at
==================================================================
a       11111   11111   Flatlands           null        2015-01-01
b       11111   11111   Flatlands Avenue    New York    2015-01-01
c       11111   11111   Ave Flatlands       New York    2015-01-01
a       22222   22222   Favory              New York    2015-01-01
b       22222   22222   Favory Avenue       New York    2017-12-12
c       22222   22222   Ave Favory          New York    2015-01-01
b       33333   33333   Sixteenth           Washington  2015-01-01
c       33333   33333   st. 16th            null        2015-01-01
c       44444   44444   st. West Land       null        2015-01-01
Let's say I have a table with information about places in different cities. The information is gathered from 3 different sources: a, b, and c.
zip and phone fields uniquely identify the location, so the rows in the DB can be grouped by these fields.
I need to merge information about various locations from various sources selecting the best value based on the set of rules for street and city columns. 
The rules are:
- For each group prioritize non empty values of streetandcityover null values.
- In each group prioritize values of streetandcitycolumns fromaandbsources overcsource (weight(a) = weight(b) > weight(c)) if these columns are not empty.
- For sources aandbprioritize column values from rows which have latestcreated_attimestamp.
Here is the result I want to receive:
zip     phone   street          city
====================================
11111   11111   Flatlands       New York
22222   22222   Favory Avenue   New York
33333   33333   Sixteenth       Washington
44444   44444   st. West Land   null
Here is a DB Fiddle to play with.
I'm not sure this is possible to achieve with SQL and maybe my best option is to switch to NoSQL DB + imperative processing task. Or just use some tool to extract information from the DB and then process it.
P.S. This is a simplified example.
 
     
    