2017-05-03 3 views
1

値:私は、子行の時間を降順で私のテーブルをソートし、親がでなければいけないというような行をフィルタリングするSQLソート親行次のような表

ID | Name   | Time  | Parent 
1 | Orange  | 1493596800 | 0 
2 | Apple  | 1483228800 | 0 
3 | Red Apple | 1493596800 | 2 
4 | Yellow Apple | 1493769600 | 2 

をゼロ。例えば

SELECT * 
    FROM MyTable as mt1 
WHERE Parent = 0 
Order 
    BY 
    (SELECT mt2.Time 
     FROM MyTable mt2 
     WHERE mt2.Parent = mt1.ID 
    Order BY mt2.Time DESC 
     Limit 1 
    ) DESC 

**出力がなければなりません:**

2 | Apple  | 1483228800 | 0 
1 | Orange  | 1493596800 | 0 
+0

何の出力は次のようになりますか? –

+0

http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-問合せ – Strawberry

+0

この場合、 'Order By Time DESC'は直接作動します。 –

答えて

1
SELECT p.ID, p.Name, MAX(c.Time) AS NewestChildTime, p.Parent 
FROM MyTable p 
LEFT OUTER JOIN MyTable c 
ON c.Parent = p.ID 
WHERE p.Parent = 0 
GROUP BY p.ID, p.Name, p.Parent 
ORDER BY NewestChildTime DESC 
+0

親の時間で子オーダーがないときはどうすれば設定できますか?分かるでしょう? – Nabi

1
select a.* from MyTable a 
left join 
(
select a.name,max(b.time) time,b.parent from MyTable a 
join MyTable b on b.parent=a.id 
where b.parent>0 group by a.name,b.parent 
) b on b.parent=a.id 
where a.parent=0 
order by b.time desc 
+0

働いているのですか? –

関連する問題