回答

收藏

从每个组中选择最上面的1行

技术问答 技术问答 251 人阅读 | 0 人回复 | 2023-09-14

我有一张表,列出已安装的软件的版本:
+ V3 x: ]. S# J6 [/ s6 Pid  | userid | version | datetime
" s8 u& j1 a* p# N/ f, J7 G! m----+--------+---------+------------------------
: }, m  U0 V/ r  _, d111 | 75     | 10075   | 2013-03-12 13:40:58.770  }- y" \9 ^1 O! o9 X( r
112 | 75     | 10079   | 2013-03-12 13:41:01.583
* b* i' m% P, O9 e113 | 78     | 10065   | 2013-03-12 14:18:24.463
0 j3 ?+ R( W! G% k( [+ K114 | 78     | 10079   | 2013-03-12 14:22:20.4376 E+ W0 K" J; N5 J6 B  a5 [
115 | 78     | 10079   | 2013-03-12 14:24:01.8306 C: [( p9 I5 z0 |' L. I6 S
116 | 78     | 10080   | 2013-03-12 14:24:06.893$ }- @# \. h5 H* h9 d& G  N- b
117 | 74     | 10080   | 2013-03-12 15:31:42.797
" K$ M1 g/ o2 K9 p9 b2 ~7 P118 | 75     | 10079   | 2013-03-13 07:03:56.1578 U# K% Z) [3 g7 E* m/ Q8 v4 M
119 | 75     | 10080   | 2013-03-13 07:05:23.137/ H2 E8 `) B0 V  Z9 D8 ?+ l
120 | 65     | 10080   | 2013-03-13 07:24:33.323+ X! o3 L. G6 ]9 ?
121 | 68     | 10080   | 2013-03-13 08:03:24.247
, K9 t* S8 v. ~# W; d9 V0 c9 h8 b122 | 71     | 10080   | 2013-03-13 08:20:16.173
# u0 l; O. z, ~" T$ p" u8 Y' H- M123 | 78     | 10080   | 2013-03-13 08:28:25.487
# y, j6 C  C/ Z" A) h0 I124 | 56     | 10080   | 2013-03-13 08:49:44.503
* u4 v) z4 q: Z* t1 |* Z我想显示每个记录中所有记录的所有字段,userid但仅显示最高版本(版本也是varchar)。: g4 t" X; f. F2 m9 @
               
# J, }. _! Q2 i# I1 J8 S- b解决方案:6 R# B. _  U2 O) q- O+ A
                ! u6 e; m! [" _- }& p
1 c/ b, a2 p+ b: b* U
* {* m8 [, T% n: ?& d# k
                您没有指定要如何处理关系,但是如果要显示重复项,将这样做。0 R0 g* p& F; Y6 F: E
SELECT a.* FROM MyTable a/ P# n) G" [! O" y+ l
LEFT JOIN MyTable b
4 W  u0 @- i1 C  ON a.userid=b.userid! T6 v  J9 A3 q1 k5 b* z
AND CAST(a.version AS INT) 要使用进行测试的SQLfiddle。
2 D, s; J, A& ^# }* L# C5 u如果您要消除重复项,并且如果存在重复项,请选择最新的重复项,则必须对查询进行某种程度的扩展;& C& P5 l1 o" M/ e
WITH cte AS (SELECT *, CAST(version AS INT) num_version FROM MyTable)! ^* K; D; g5 A, a# g+ X
SELECT a.id, a.userid, a.version, a.datetime
, `/ Y' ?7 {+ N# O/ s- T1 yFROM cte a LEFT JOIN cte b6 Q. k$ ^& P2 l9 Q) E1 H4 |- v
  ON a.userid=b.userid3 A) k6 X$ t, F+ z
AND (a.num_version
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则