我知道如何在sql查询中使用MAX()
函数和GROUP BY
子句,但在我的情况下,我想要分组的记录有点不同。
例如我有一个下表
HostName ModifyDate Sr No
-------------------------------------------
PC-1 2015-12-04 08:45:52.847 1
PC-1 2015-12-04 08:48:51.025 2
PC-2 2015-12-04 08:50:01.125 3
PC-2 2015-12-04 08:50:45.545 4
PC-2 2015-12-04 08:53:44.897 5
PC-1 2015-12-04 09:02:17.524 6
PC-2 2015-12-04 09:18:36.788 7
PC-2 2015-12-04 09:22:01.041 8
PC-1 2015-12-04 09:31:41.744 9
结果应该是这样的
HostName ModifyDate Sr No
------------------------------------------
PC-1 2015-12-04 08:48:51.025 2
PC-2 2015-12-04 08:53:44.897 5
PC-1 2015-12-04 09:02:17.524 6
PC-2 2015-12-04 09:22:01.041 8
PC-1 2015-12-04 09:31:41.744 9
以上结果显示了连续HostName记录的最大日期记录。你可以看到有3个条目(SrNo 3,4,5)但我只拿了5个,这是最新的三个。在前两个记录(SrNo 1,2)中也使用了相同的场景我只获得了第二个记录,这是最近的两个记录。
问题在于我无法获取最大日期记录。如果我将MAX(ModifyDate)
与HostName
组一起使用,那么它将只返回最新的两个记录(Sr No 8和9)。我想获取每个连续HostName
条目的最大记录。
注意:我无法为其创建存储过程。我希望通过单个sql语句获取该记录。表中没有Sr No字段。我只是为了理解这个案子。
答案 0 :(得分:1)
这是Grouping Islands of Contiguous Dates问题,可以使用ROW_NUMBER
:
WITH Cte AS(
SELECT *,
grp = ROW_NUMBER() OVER(ORDER BY ModifyDate) -
ROW_NUMBER() OVER(PARTITION BY HostName ORDER BY ModifyDate),
SrNo = ROW_NUMBER() OVER(ORDER BY ModifyDate)
FROM LOG
),
CteFinal AS(
SELECT *,
rn = ROW_NUMBER() OVER(PARTITION BY HostName, grp ORDER BY SrNo DESC)
FROM Cte
)
SELECT
HostName, ModifyDate, SrNo
FROM CteFinal
WHERE rn = 1
ORDER BY SrNo
答案 1 :(得分:1)
你可以尝试这种方法..
<input type="hidden" name="item_name" value="Donation to YOUR_BUSINESS_NAME">
<label><input type="text" name="amount" size="4"/>Donation Amount</label>
<label><input name="on0" id="checkbox_gift_membership" value="This is a gift membership." type="checkbox">This is a gift membership.</label>
<table>
<caption>Gift Recepient information</caption>
<tbody>
<tr>
<td><label><input name="on1" value="Name" type="hidden">Name</label></td>
<td><input name="os1" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on2" value="Address" type="hidden">Address</label></td>
<td><input name="os2" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on3" value="City" type="hidden">City</label></td>
<td><input name="os3" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on4" value="State" type="hidden">State</label></td>
<td><input name="os4" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on5" value="ZIP code" type="hidden">ZIP code</label></td>
<td><input name="os5" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on6" value="Phone number" type="hidden">Phone number</label></td>
<td><input name="os6" maxlength="200" type="text"></td>
</tr>
<tr>
<td><label><input name="on7" value="Email" type="hidden">Email</label></td>
<td><input name="os7" maxlength="200" type="text"></td>
</tr>
</tbody>
</table>
<label><input name="on8" id="checkbox_news_updates" value="I would like to receive news and updates." type="checkbox">I would like to receive news and updates.</label>
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
</form>