Sql server 选择不同的记录,筛选不起作用
大家好,我是SQl新手。查询以生成以下记录 我有一张有记录的桌子Sql server 选择不同的记录,筛选不起作用,sql-server,Sql Server,大家好,我是SQl新手。查询以生成以下记录 我有一张有记录的桌子 c1 c2 c3 c4 c5 c6 1 John 2.3.2010 12:09:54 4 7 99 2 mike 2.3.2010 13:09:59 8 6 88 3 ahmad 2.3.2010 13:09:59 1 9
c1 c2 c3 c4 c5 c6
1 John 2.3.2010 12:09:54 4 7 99
2 mike 2.3.2010 13:09:59 8 6 88
3 ahmad 2.3.2010 13:09:59 1 9 19
4 Jim 23.3.2010 16:35:14 4 5 99
5 run 23.3.2010 12:09:54 3 8 12
我只想记录。
i、 e每天只有一条最新记录。如果两者同时发生,则按C1排序。因此在1和3中,它应该取3
3 ahmad 2.3.2010 14:09:59 1 9 19
4 Jim 23.3.2010 16:35:14 4 5 99
我在这方面遇到了一个新问题。
如果我根据最后一条记录丢失的条件筛选记录。我尝试了很多方法,但还是失败了。这里是我的表格
SELECT * FROM update_log t1
WHERE (t1.c3) =
(
SELECT MAX(t2.c3)
FROM update_log t2
WHERE DATEDIFF(dd,t2.c3, t1.c3) = 0
)
and t1.c3 > '02.03.2010' and t1.modified_at <= '22.03.2010'
我不知道这个查询只会导致
3 ahmad 2.3.2010 14:09:59 1 9 19
列c3的格式为datetime。我正在将数据输入到列中
使用$date=日期。m.Y H:i,时间;-今天的简单日期获取
我为了同样的目的尝试的另一个问题
从convertvarchar10选择*从convertvarchar10选择convertvarchar10,C3104作为date,maxc3作为max_date,maxc1作为Nr从convertvarchar10的update_log组中选择,C3104作为t2上的t2内部连接update_log作为t1。max_date=t1.c3和convertvarchar10,C3104=date和t1。[]=Nr其中t1.c3>='02.03.2010'和t1.c3以下步骤应产生您所需的结果 找到每天的最大c3。 将结果与原始表合并,仅保留最大c1值。 SQL语句已编辑 注释 您应该阅读关于本网站如何运作的相关信息。如前所述,堆栈溢出并不像新闻阅读器那样使用,在通过创建新答案给出答案后,您会询问后续问题 您应该编辑您的问题以获取更多信息或使用评论。如果附加信息是它实际上改变了整个问题的信息,那么你应该考虑从中提出一个新的问题。
话虽如此,还是好好享受吧。好了,现在我明白了。实际上,我这样写查询也是出于同样的目的
select * from #temp
select * from
(select max(c1) as nr from
(select convert(varchar(10), c3,104) as date, max(c3) as max_date
from #temp where
convert(varchar(10),c3,104) >= '02.02.2010' and
convert(varchar(10),c3,104) <= '23.02.2010'
group by convert(varchar(10), c3,104))
as t2 inner join #temp as t1 on (t2.max_date = t1.c3 and
convert(varchar(10), c3,104) = date)
group by convert(varchar(10),max_date,104))
as t3 inner join #temp as t4 on (t3.nr = t4.c1 )
如果我将这两行更改为c3>='02.02.2010'和
c3假设c1是唯一的,希望甚至是主键。这还假设日期数据类型使用SQL Server 2008
SELECT t1.*
FROM update_log t1
WHERE t1.c3 > '02.03.2010'
AND t1.modified_at <= '22.03.2010'
AND t1.c1 IN
( SELECT TOP 1 c1
FROM update_log t2
WHERE CAST(t1.c3 As DATE) = CAST(t2.c3 As DATE)
ORDER BY c3 DESC, c1 DESC
)
在您的表中修改的列在哪里?@help\u inmssql-我已经更改了查询。你能核实一下结果吗。-1编辑你的问题。因为它不是你问题的答案,所以不要把它和答案放在一起@帮助\u inmssql-因为c3有日期和时间,c3
select * from #temp
select * from
(select max(c1) as nr from
(select convert(varchar(10), c3,104) as date, max(c3) as max_date
from #temp where
convert(varchar(10),c3,104) >= '02.02.2010' and
convert(varchar(10),c3,104) <= '23.02.2010'
group by convert(varchar(10), c3,104))
as t2 inner join #temp as t1 on (t2.max_date = t1.c3 and
convert(varchar(10), c3,104) = date)
group by convert(varchar(10),max_date,104))
as t3 inner join #temp as t4 on (t3.nr = t4.c1 )
SELECT t1.*
FROM update_log t1
WHERE t1.c3 > '02.03.2010'
AND t1.modified_at <= '22.03.2010'
AND t1.c1 IN
( SELECT TOP 1 c1
FROM update_log t2
WHERE CAST(t1.c3 As DATE) = CAST(t2.c3 As DATE)
ORDER BY c3 DESC, c1 DESC
)