Sql server 选择不同的记录,筛选不起作用

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

大家好,我是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    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
    )