SQL Server 2000
我的表:
CARDNO CARDEVENTDATE CARDEVENTTIME
121 20090610 025050
121 20090611 040000
121 20090611 050000
121 20090611 020000
122 20090611 030001
122 20090611 030000
123 20090611 080000
123 20090611 100000
123 20090611 132449
123 20090611 025959
124 20090610 030000
124 20090612 030001
125 20090611 030002
125 20090612 040000
Run Code Online (Sandbox Code Playgroud)
Cardno是独立的表Cardeventdate,cardeventtime是独立的表
从上表中我想获得特定cardeventdate和Cardno的最佳时间和最低时间
对于121,20090611,Top Time是040000,Bottom Time是020000 For 123,20090611,Top Time是080000,Bottom Time是025959 ...就像我需要的那样.
我使用了Min(时间)和Max(时间),但它显示了这样.
对于CardNo - 121 Cardeventdate - 20090611 Min Time - 020000 Max Time - 040000
我不想得到min和Max,我只需要特定Date和Cardno的top和Bottom(或)First和Last time值.
我用过这个查询
SELECT RowNumber = IDENTITY (int, 1, 1), CARDNO, CARDEVENTDATE, CARDEVENTTIME INTO #Table1 FROM T_CARDEVENT SELECT t1.CARDNO, t1.CARDEVENTDATE, t1.CARDEVENTTIME FROM #Table t1 INNER JOIN (SELECT RowNumber = MIN(RowNumber), CARDEVENTDATE, CARDNO FROM #Table1 t WHERE (cardeventdate > 20090601) GROUP BY cardno, cardeventdate UNION ALL SELECT MAX(RowNumber), CARDEVENTDATE, CARDNO FROM #Table1 t WHERE (cardeventdate > 20090601) GROUP BY cardno, cardeventdate) t2 ON t2.rownumber = t1.rownumber
Run Code Online (Sandbox Code Playgroud)
输出:
ROWNUMBER CARDNO CARDEVENTDATE CARDEVENTTIME
335 0121 20090611 040000
1099 0121 20090611 050000
1100 0121 20090611 025050
336 0121 20090612 020000
337 0122 20090611 030001
338 0122 20090612 030000
339 0123 20090611 080000
1101 0123 20090611 100000
1102 0123 20090611 132449
340 0123 20090612 025959
341 0124 20090611 030000
342 0124 20090612 030001
343 0125 20090611 030002
344 0125 20090612 040000
Run Code Online (Sandbox Code Playgroud)
所以这里为所有列创建行号,从那里我必须采取特定日期的第一次和最后一次.
期待输出
CARDNO CARDEVENTDATE CARDEVENTTIME Expecting
0121 20090611 040000 Top Value
0121 20090611 020000 No Need
0121 20090611 025050 Bottom Value
Run Code Online (Sandbox Code Playgroud)
.........等等
需要查询帮助.
好吧,除非你有一些额外的字段来建立订单,否则这是不确定的.考虑到23-04-2009的三个值 - APPLE是第一个,ROSE是最后一个?如果所有三个条目的ID和DATE相同,则没有定义的顺序来过滤掉"GRAPHE"......
渣
更新:我稍微扩展了Lieven的想法,并在我的设置中使用了它:
DECLARE @TempTable TABLE (RowNumber INT IDENTITY(1,1),
DayNumber INT,
ID VARCHAR(3), DateField DATETIME, Value VARCHAR(32))
INSERT INTO @TempTable(DayNumber, id, datefield, value)
SELECT DATEPART(DAYOFYEAR, DateField), ID, DateField, Value
FROM @Table
SELECT *
FROM @TempTable t
INNER JOIN
(SELECT RowNumber = MIN(RowNumber), DayNumber, ID
FROM @TempTable t
GROUP BY DayNumber, t.ID
UNION ALL
SELECT MAX(RowNumber), DayNumber, ID
FROM @TempTable t
GROUP BY DayNumber, t.ID) t2
ON t2.RowNumber = t.RowNumber
GO
Run Code Online (Sandbox Code Playgroud)
我基本上创建了一个带有附加信息的临时表 - 一个用于创建一些订单的人工"RowNumber",以及用于获取按日期分组的日期的"DayNumber"(没有时间).
似乎对我有用 - 它对你也有用吗?
| 归档时间: |
|
| 查看次数: |
2331 次 |
| 最近记录: |