この記事ではSQL Serverにおける
グループ化の最大値、最小値、最大値に相当する時間、最小値に相当する時間に関する知識を解説します。
最初に Students テーブルを作成しますCREATE TABLE [dbo].[Students]([Id] [int] IDENTITY(1,1) NOT NULL,
[age] [int] NULL,
[name] [nvarchar ] (50) NULL,
[addTime] [datetime] NULL
) ON [PRIMARY]
INSERT [dbo].[生徒] ([年齢], [名前], [addTime]) VALUES ( 8, N'李思', '2017-05-03 00:00:00.000')
INSERT [dbo].[生徒] ([年齢], [名前], [追加時刻]) VALUES (98, N'李思' , '2017-10-03 00:00:00.000')
INSERT [dbo].[生徒] ([年齢], [名前], [addTime]) VALUES (34, N'张三', '2016) -09 -08 00:00:00.000')
INSERT [dbo].[生徒] ([年齢], [名前], [追加時間]) VALUES (45, N'张三','2011-05-08 00) :00 :00.000')
INSERT [dbo].[生徒] ( [年齢], [名前], [addTime]) VALUES (5, N'张三', '2014-04-01 00:00:00.000' )
関数 を使用します。ウィンドウ関数の 動作の説明は、関数の OVER 句に表示され、複数の要素が含まれます。パーティショニングとソート、そして frameworkselect unique name,
maxAge, max(case maxAgenum when 1 then addtime else '' end) over(partition by name) maxAddTime ,minage,max(case minAgenum when 1 then addtime else '' '' end) over(名前で分割) minAddTime
from (
select name,addtime,
max(age) over(名前で分割) maxAge,
min(age) over(名前で分割) minAge,
RANK() over(名前順に年齢順に分割) maxAgeNum ,
RANK() over(名前順に年齢順に分割) 学生からの minAgeNum
) s
2 番目の書き方:
with s as
(select name,max (年齢) maxAge 、min(年齢) minAge の生徒
名前でグループ化
)
名前を選択、max(maxAge) maxAge,max(maxAgeTime) maxAgeTime,max(minAge) minAge,max(minAgeTime) minAgeTime from (
ss を選択.name,s .maxAge,ss.addTime maxAgeTime,0 minAge, '' minAgeTime 学生から ss.name=s.name と ss.age=s.maxAge で s を内部結合します
union
allselect ss.name ,0 maxAge , '' maxAgeTime,s.minAge minAge,ss.addTime minAgeTime 学生から ss.name=s.name および ss.age=s.minAge で s を内部結合します) 名前によるグループ
この SQL サーバー最大値のグループ化を求める 値、最小値、最大値対応時間、最小値対応時間については、PHP 中国語 Web サイトを参照してください。
関連する推奨事項:
left join on と where 条件の配置に関する関連説明 php+mysql のファジークエリ関数に関する関連知識 php を介してファイルをコピーおよび移動する方法以上がSQL Server は、グループの最大値、最小値、最大値に対応する時間、および最小値に対応する時間を見つけます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。