如何检查sql server中日期和日期范围内的日期记录

时间:2014-07-26 01:52:32

标签: sql-server sql-server-2008 sql-server-2012

嗨朋友们,我对sql server有点怀疑 在这里我想要基于条件的数据 相同的id和status等于s然后该日期值为  如何在sql server中编写查询

表:emp

id  |status      |date(mm-dd-yy) |fdate(mm-dd-yy)  |tdate(mm-dd-yy)
 1  | S          |03-16-11       |                 |
 1  | b          |               | 03-15-11        |03-18-11
 1  | s          |03-17-11       |                 |
 1  | b          |               | 04-20-12        |04-30-12
 1  | S          |04-20-12       |                 |
 1  | s          |04-10-12       |                 |
 1  | s          |10-01-14       |                 |
 1  | b          |               |10-02-14         |10-25-14
 2  | s          |01-18-12       |                 |
 2  | b          |               |01-18-12         |01-28-12
 2  | b          |               |03-10-13         |03-24-13
 2  | s          |03-16-13       |                 |
 2  | s          |03-10-13       |                 |
 2  | s          |03-23-13       |                 |
 2  | b          |               |04-20-13         |04-27-13
 2  | s          |07-01-14       |                 |

表(status = s,id,date)将其与status = b,相同的id号和日期(状态s的日期值)进行比较,日期范围为fdate和tdate。 如果该数据在范围内,那么结算是其他明智的结算否

输出

 id  |status      |date(mm-dd-yy) |fdate(mm-dd-yy)  |tdate(mm-dd-yy)   |Billing
 1  | S          |03-16-11       |                 |                   |yes
 1  | s          |03-17-11       |                 |                   |yes
 1  | S          |04-20-12       |                 |                   |yes
 1  | s          |04-10-12       |                 |                   |no
 1  | s          |10-01-14       |                 |                   |no
 2  | s          |01-18-12       |                 |                   |yes
 2  | s          |03-16-13       |                 |                   |yes
 2  | s          |03-10-13       |                 |                   |yes
 2  | s          |03-23-13       |                 |                   |yes
 2  | s          |07-01-14       |                 |                   |no

我尝试过如下查询

select * 
from ( select * from emp a where status ='s') a
inner join (select * from emp b where status='b') b
    on a.pn=b.pn
where a.date<=b.date1 and a.date>=b.date2

它不会给出明显的结果。 请告诉我如何在sql server中编写查询。

1 个答案:

答案 0 :(得分:0)

尝试

select a.Id, 
      a.status, 
      a.date, 
      a.fdate, 
      a.tdate, 
      max(IsNull(case when a.date between b.fDate and b.tDate 
         then 'yes' 
         else 'no' 
      end, 'no')) Billing  
from emp a 
left join emp b 
    on a.Id=b.Id
where a.status ='s'
   and b.status = 'b'
group by a.Id, 
      a.status, 
      a.date, 
      a.fdate, 
      a.tdate

一些问题/评论:

  • 有哪些字段:pndate1date2
  • 我猜你的查询中的
  • date1大于date2