Re: [閒聊] 各家的SQL都有自己的脾氣啊..
其實應該可以用
SELECT uid,max(login_time) FROM log GROUP BY uid ORDER BY log_time DESC
大概這樣的寫法
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言:
: 最近工作上接觸到的DBMS換成了informix.
: 原本從MySQL接觸到MS SQL Server時,
: 以為SQL Server已經算是有個性了。
: 想不到這下informix的脾氣也滿大的(誤
: 像是子查詢裡不能用order(好像是)
這樣好像沒什麼意義呀…
ORDER鷹該要在資料一切備妥才發生的不是嗎@@a
不然子句的資料跟母句結合後不就又亂掉了
我想你在子句用ORDER的意義應該是在於匯總吧(底下有說)
除非說是用UNION結合的資料,這種在子句裡用ORDER就比較有意義,
印象中MSSQL可以先UNION再ORDER也可以先ORDER在UNION
其他家我就沒試過了…
: 想用這篇來稍微聊一下各家SQL一些常用上的語法差異
: 以ORDER By來說
: 以往在MySQL跟SQL Server上,Order By的條件跟SELECT是脫勾的
: 可以獨立出來運作
: 不過informix卻是要在SELECT column出現的才能Order的樣子
: 舉個例子,依最後登入時間來依序列出使用者
: MySQL跟SQL Server是這樣的
: SELECT *
: FROM user U
: ORDER BY (SELECT max(login_time) FROM log L WHERE L.uid=U.uid)
這個寫法其實有點奇怪,
order by吃得東西鷹該要是唯一值,當然用了max會是唯一的,
但是這樣變成外面要檢查子句select出來是不是唯一的,也有可能根本就沒檢查,
直接拿第一筆來用
: 而informix要這樣
: SELECT *,(SELECT max(login_time) FROM log L WHERE L.uid=U.uid) as log_time
: FROM user U
: ORDER BY log_time DESC
: 還滿奇特的..
: 不知道Oracle又是怎樣~
跟上面差不多意思,如果子句不是唯一的話,是要怎樣join呢?
或許有些parser會自動組合這些句子吧,不太清楚…
但GROUP BY才是比較嚴謹的寫法吧,
之前用MSSQL的時候,不在GROUP BY fields裡面的field,
都會要求要用匯總函數(sum/max/count之類的)來變成唯一值,
但我剛剛在MySQL試的時候好像沒這種要求…
還是不知道MySQL到底是依據什麼原則在動就是了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.131.149.15
※ 編輯: buganini 來自: 140.131.149.15 (04/07 00:12)
※ 編輯: buganini 來自: 140.131.149.15 (04/07 00:15)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):