gpt4 book ai didi

sql-server - TSQL - 如何优化查询?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:56 25 4
gpt4 key购买 nike

我有新闻表

News
-------
NewsId
NewsText
CREATED_DATE

我需要获取从指定日期到未知日期的新闻,但结果应包含 5 天的新闻。

例如:

  • 如果我有与这些日期相关的新闻:29 日、28 日、27 日、5 日、4 日、3 日并将开始日期指定为 29 日,我需要获取创建日期介于 29 日和 4 日之间的新闻。

在那种情况下,我不知道如何在没有蛮力的情况下获得最低日期(第 4 个):

declare @highDate date = '2011-09-20';
declare @rows int = 0;
declare @lowDate date = @highDate;
declare @i int = 0;

--Querying while rows count != 5
WHILE (@rows != 5)
BEGIN

if (@i = 60)
break;

set @i = @i + 1;
set @lowDate = (select DATEADD(day, -1, @lowDate));

set @rows = (select COUNT(*) from
(SELECT DAY(CAST(CREATED_DATE AS date)) as c1
FROM .[dbo].[NEWS]
and CREATED_DATE > @lowDate
and CREATED_DATE < @highDate
group by DAY(CAST(CREATED_DATE AS date))) as rowsCount);
END

--then return news between to known dates
SELECT *
FROM [dbo].[NEWS]
and CREATED_DATE > @lowDate
and CREATED_DATE < @highDate
order by CREATED_DATE desc

我想在那个算法中有太多针对数据库的查询,我想摆脱 60 天的旧限制

最佳答案

declare @highDate date = '2011-09-20'

select * from (
select *,
dense_rank() over (order by cast(created_date as date) desc) rnk
from News
where CREATED_DATE <= @highDate
) as t
where t.rnk <= 5

关于sql-server - TSQL - 如何优化查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8253080/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com