У меня есть таблица со структурой вроде этого, которая представляет изменения статуса.распространять иерархические значения из одного столбца
+-----------+----------+----------------+-----------------+-------+
| record_id | group_id | attribute type | change date | value |
+-----------+----------+----------------+-----------------+-------+
| 1 | 1 | status | 4/16/2008 18:59 | s1 |
| 2 | 1 | details | 4/16/2008 18:59 | d5 |
| 3 | 1 | details | 8/7/2008 18:31 | d2 |
| 4 | 1 | details | 2/5/2009 22:15 | d1 |
| 5 | 1 | status | 4/3/2009 21:27 | s2 |
| 6 | 1 | details | 4/3/2009 21:27 | d7 |
| 7 | 2 | status | 4/3/2009 21:46 | s1 |
| 8 | 2 | details | 4/3/2009 21:46 | d1 |
+-----------+----------+----------------+-----------------+-------+
Я хотел бы запросить изменения статуса и сведения о состоянии изменения в двух столбцах, сгруппированные по временной метке (фактически любое изменение состояния делает изменения в детали, поэтому только детали изменить метки время может быть использованы для облегчения группировки) и статус распространяется на соответствующие детали, например:
+-----------+-----------------+--------+---------+
| object id | change date | status | details |
+-----------+-----------------+--------+---------+
| 1 | 4/16/2008 18:59 | s1 | d5 |
| 1 | 8/7/2008 18:31 | s1 | d2 |
| 1 | 2/5/2009 22:15 | s1 | d1 |
| 1 | 4/3/2009 21:27 | s2 | d3 |
| 2 | 4/3/2009 21:46 | s1 | d1 |
+-----------+-----------------+--------+---------+
это то, что я начал с, но она оставляет меня нулями
SELECT history.record_id,
history.group_id,
history.changedate,
status_chages.value AS status,
history.value AS details
FROM history
LEFT JOIN (SELECT
history.group_id,
history.changedate,
history.value
FROM history
WHERE history.attribute_type = 'status') status_chages
ON status_chages.group_id = history.group_id AND
status_chages.changedate = history.changedate
WHERE history.attribute = 'details'
Первая вещь, которая пришла т o мой ум должен заполнить NULL с данными предыдущих строк.
Но есть ли лучший способ для запроса результата, указанного выше?
Какие СУБД вы используете? –
На данный момент я пытаюсь сделать это с помощью Postgres, но целевая СУБД, вероятно, будет MS SQL Sever (добавленные теги). – Andrey
Зачем разрабатывать Postgres при планировании использования SQL Server в процессе производства? Эти две СУБД действительно очень разные –