SQL 选择前几行的条件

标签 sql sql-server tsql select

如何写这样的选择:

SELECT filename, username, date_time, field1, field2... FROM... JOIN... WHERE...
UNLESS user_downloaded_this_file_today_already

我想忽略同一用户在同一天下载的文件。数据示例:

12 | file1.jpg | barney | 2012-03-15 12:50:10 | ...
13 | file1.jpg | roger  | 2012-03-15 13:50:10 | ...
14 | file2.jpg | barney | 2012-03-15 14:50:10 | ...
15 | file1.jpg | barney | 2012-03-15 15:50:10 | ...

如何编写忽略第 4 行的 SELECT?相同的文件名,相同的用户,日期差异 < 1。这真的可能吗?

最佳答案

为了在当天允许重复,我认为以下内容就足够了:

select filename, username, date_time, field1, field2
  from yourtable t
 where not exists (
    select 1 
      from yourtable
     where t.filename = filename
       and t.username = username
       and trunc(t.date_time) = trunc(date_time)
       and t.date_time > date_time)
 order by t.date_time

这将返回每天每个文件/用户组合的第一个请求。

关于SQL 选择前几行的条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9719189/

相关文章:

tsql - 如何在 T-SQL 中插入只有自动生成列的行?

sql-server - 在sql server中转换为ASCII字符

sql - 不使用任何聚合函数计算行数

sql - 如果列表中的值为空,则 NOT IN 返回 false

sql - 对于 select 中的每一行,将多行插入到一个表中

c# - 不能向表中添加一个以上的用户。标识插入设置为关闭

java - Spring Boot项目和com.microsoft.sqlserver.jdbc.SQLServerException : The "variant" data type is not supported

sql - 在 SQL 中使用子查询

mysql - 如何使用 24 小时制从 SQL Server 获取以分钟为单位的时差?

sql-server - 如何在SQL Server中创建维护计划?