Eu tenho duas mesas:
things
:+------+----------------+------------+ | id | current_status | created_at | +------+----------------+------------+ | 7770 | active | 2016-08-09 | +------+----------------+------------+
thing_status_tract
:+----------+-------------+-----------+---------------------+ | thing_id | status_from | status_to | changed_at | +----------+-------------+-----------+---------------------+ | 7770 | incomplete | inactive | 2016-08-09 16:26:22 | | 7770 | inactive | active | 2016-08-10 12:31:04 | +----------+-------------+-----------+---------------------+
Preciso de dados no seguinte formulário. Esta tabela tem um status e seu carimbo de data/hora inicial e final correspondente para um determinado thing_id
:
+----------+-------------+---------------------+---------------------+
| thing_id | status | status_start_date | status_end_date |
+----------+-------------+---------------------+---------------------+
| 7770 | incomplete | 2016-08-09 00:00:00 | 2016-08-09 16:26:22 |
| 7770 | inactive | 2016-08-09 16:26:22 | 2016-08-10 12:31:04 |
| 7770 | active | 2016-08-10 12:31:04 | now() |
+----------+-------------+---------------------+---------------------+
Como fazer isso com uma consulta SQL?
Claro, minha resposta anterior foi apenas para responder à sua pergunta imediata. Como mencionei em meus comentários, seu próprio modelo de dados é falho. Não apenas você não deve manter 'status_from' (prevous_status) e 'status_to' na tabela de histórico, como também NÃO deve manter o status na tabela THINGS. Isso viola as regras de normalização de dados padrão.
O que você deve fazer é descartar o status da tabela THINGS, estabelecer um relacionamento FK entre as duas tabelas e usar uma consulta adequada para derivar o status atual quando necessário.
Primeiro, crie e preencha a tabela THINGS. Adicionei algumas colunas apenas para indicar os tipos de coisas que devem estar nesta tabela:
S
Em seguida, crie e preencha a tabela de rastreamento de histórico:
E seu relatório de histórico (como antes)
E seu relatório de status atual