回答

收藏

SQL选择具有不同的“名称”列的最新记录

技术问答 技术问答 107 人阅读 | 0 人回复 | 2023-09-13

我确实进行了搜索,发现该SQL在最近的日期之前选择了行,该
5 ~2 ?% t( Q/ v6 I* C8 c3 L. _8 `行 与我想要的日期非常接近,但我似乎无法使它起作用。
, ?/ V; e4 ]4 t我收到一个错误,因为选择列表中的列“ ID”不包含在聚合函数或GROUP BY子句中,所以它无效。4 `; Z* b0 X: _  d5 x0 g+ M
我想要每个不同名称的最新日期
& O- K- w& _" ?3 K: T; m5 Y( H1 h. PSelect ID,Name,Price,Date' G" a' z9 k& G8 q. T% W
From  table8 {* X; g4 g+ L/ ^, w( J
Group By Name/ S! J) k$ q( G& L
Order By Date ASC. P* C& P* c. \
这是我想要的一个例子: e, [+ B/ s9 y) ]7 l3 Y
         Table
" R6 e' r& f/ D) W8 xID| Name | Price |   Date
( D9 r0 N" Q* f9 Q---------------------------------
$ H- F+ Y# n) P2 U3 i3 ~0 |  A   |  10   | 2012-05-03# z+ }+ d9 G- C* G2 M: Y
1 |  B   |   9   | 2012-05-02
; x4 m7 o9 h2 X. p, P& ^7 O8 B2 |  A   |   8   | 2012-05-04
8 [4 K. @+ ]. t3 |  C   |  10   | 2012-05-03* n& U3 U* O# [2 |4 Y4 L
4 |  B   |   8   | 2012-05-01* |* k% P- n8 L) e0 M0 J! [
理想的结果
$ U% c9 h1 @9 h2 iID| Name | Price |   Date
5 a, O% \$ ]! U% g: v% Y------------------------------
. D1 u( j2 Y' A2 |  A   |   8   | 2012-05-04
' |* t0 k2 ~* S: c  F3 |  C   |  10   | 2012-05-03   
. d7 y6 Q1 J  V& o  ]' D8 L1 |  B   |   9   | 2012-05-022 U9 E, l5 y: h. r7 }/ U3 `2 S  e
我正在使用Microsoft SQL Server 2008
  o+ @( z/ I. M感谢您的帮助或指向正确的方向: V8 J7 \9 ]. y
               
0 Q; P% u' r* o解决方案:
9 n: R. Q" [5 j  }8 Y                " I6 |' {. `0 n5 a: a( h
, d% D' A( g' W9 P7 l  ~% ?

+ j: u0 Q, {2 Y# }/ Z1 p* f9 D                Select ID,Name, Price,Date
$ n5 j2 H' c4 o$ ~& o! M. v/ u    From  temp t1. ^! e6 s4 n# N3 |% G6 S
    where date = (select max(date) from temp where t1.name =temp.name)
: ?' ]: v" p0 e# `" K    order by date desc9 w) g* W/ K6 \/ `' t3 v
这是一个SQL Fiddle,上面有一个演示
2 u/ O+ m6 d  @; l/ [1 u  k' l+ }% M8 P' m  \2 d7 Y: V# b& l
或者如Conrad所指出的,您可以使用INNER JOIN(另一个带有演示的SQL1 q2 p2 T& X% d# j' _
Fiddle):$ F, r: U; b- t, c9 C
SELECT t1.ID, t1.Name, t1.Price, t1.Date
4 T$ l! a, x) `! \& n6 W+ AFROM   temp t1
  w3 B& d7 `* N; FINNER JOIN
# S1 c& [8 X$ i0 Q(9 z" S! I' j3 ~
    SELECT Max(date) date, name
* H) K. @# J; ?2 B% r- H  S; i    FROM   temp
+ o7 k- q* i" ^4 `! y7 n    GROUP BY name / V  O, d: I# K
) AS t2
# k& m, E" ~% U; {    ON t1.name = t2.name
3 P* ~8 j$ O! M& n    AND t1.date = t2.date ! v: o8 f2 m7 }! J$ ~) J- l. g
ORDER BY date DESC
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则