如果前一天是星期天,我需要打印当前日的文件,加上before...but日的文件,然后打印星期六的文件。
我有一个数据库,其中包含一个month..each日的文件,生成一些文件,但是星期日是一个假日,在那一天没有文件是generated.now,我已经执行了查询,以这样的方式选择文件,以便给出当前日期将得到当天和前一天的文件。但问题是在周一,当我给出当前的日期时,它会产生周一和周日的文件.我不想打印星期日的文件,因为它是空的,而不是当我给当前日期如果是星期一,我应该得到星期六的文件,而不是星期一。这是现在正在使用的代码
select files from table1 where [date]>=DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-1),0) "; 除了星期天,我每天都要输入档案。
insert into dbtable(date,files) values('date value',' filename');发布于 2016-02-08 10:45:13
尝试使用MySQL函数DAYNAME(date1)来检查日期是否为sunday,如果是的话,则得到两天而不是一天的差。
mysql> SELECT DAYNAME(GETDATE());
+-----------------------+
| DAYNAME('2008-05-15') |
+-----------------------+
| Thursday |
+-----------------------+
1 row in set (0.01 sec)如果使用的是SQL server,则可以尝试datename函数获得日期名称:
datename(dw,getdate()) 为Server尝试此操作:
SELECT files from table1
where [date]>=DATEADD(DAY,case when datename(dw,(GETDATE()-1))='SUNDAY' THEN -2 ELSE -1 END,getdate());对于MySQL服务器,请尝试:
SELECT files from table1
where `date`>=DATE_SUB(current_Date,interval (case when DAYNAME(date_sub(current_date,interval 1 day))='SUNDAY' THEN 2 ELSE 1 END) day);发布于 2016-02-08 10:50:16
寻找两个日期,当前和之前的日期。从这些记录中拿出新的。
select files
from table1
where date =
(
select max(date)
from table1
where date in (getdate(), getdate() - interval 1 day)
);(关于守则的更新-Monk的评论。谢谢。)
这是标准的SQL,除了特定于MySQL的日期操作。如果您错误地使用了标记的DBMS,那么将从当前日期减去日期的部分替换为适合您的DBMS的部分。)
更新:您希望从两天中选择的,即currect日和前一天的最后一个日期。由于不应该有未来的记录,这通常意味着表中的两个最大日期。
使用ORDER和altered进行稍微修改的查询:
select files
from table1
where date in
(
select date
from table1
order by date desc limit 2
);发布于 2016-02-08 10:53:05
假设您使用的是Server (而不是MySQL),则可以使用交叉应用程序获取文件的最后两个日期的数据:
SELECT *
FROM dbo.table1 o
CROSS APPLY ( SELECT TOP 2 [date]
FROM dbo.table1 i
GROUP BY [date]
WHERE [date]>=DATEADD(DAY,DATEDIFF(DAY,0,GETDATE()-5),0)
ORDER BY [date] DESC
) det
WHERE det.[date] = o.[date]https://stackoverflow.com/questions/35267336
复制相似问题