我的表格结构如下
temp
ID | Date
---|-----------
1 | 2018-01-01
2 | 2018-01-01
3 | 2018-01-01
4 | 2018-01-02
5 | 2018-01-02
6 | 2018-01-03
我将从用户那里获得开始和结束日期的输入:
@StartDate DATE = '2018-01-01'
@EndDate DATE = '2018-01-03'
我希望我的回报结构如下:
ID | Date
---|-----------
1 | 2018-01-01
4 | 2018-01-02
6 | 2018-01-03
我试过这样做:
select distinct temp.ID, joinTable.Date
from temp
inner join (
select min(innerTemp.Date), innerTemp.ID
from temp innerTemp
where innerTemp.Date >= @StartDate
and innerTemp.Date < @EndDate
group by innerTemp.ID, innerTemp.Date
) as joinTable on joinTable.ID = temp.ID and joinTable.Date = temp.Date
where temp.Date >= @StartDate
and temp.Date < @EndDate
order by temp.Date desc
要尝试将表连接到自身,每天只有一个条目,然后从中选择,但这不起作用。我对这个很难过。有什么想法吗?
答案 0 :(得分:3)
这看起来很复杂。这将返回您想要的结果集:
select min(id), date
from temp
where date >= @StartDate and date < @EndDate
group by date;
如果您要保留其他列(因此group by
不合适),一个性能良好的简单方法是:
select t.*
from temp t
where t.id = (select min(t2.id) from temp t2 where t2.date = t.date and t2.date >= @StartDate and t2.date < @EndDate);
当然,您也可以使用row_number()
,但在temp(date, id)
和temp(id)
上使用索引时,上述情况应该非常快。
答案 1 :(得分:2)
select cast(cast(year as varchar(max))+'-'+cast(month as varchar(max))+'-01' as datetime)