2017-09-05 75 views
0

我有这个查询工作在一个捏,但它需要更好。我正在学习sqlsrv,并且正在努力解决时间问题。在sql server语句中添加时间变量组

基本上我需要拉所有独特的到来(这是schtm +持续时间),并显示每小时期望有多少。有人能指引我朝着正确的方向吗?

此查询显示每个独特的时间像5:30,5:45,6:00,6:15等我需要它按小时分组,因此它会显示5 - 6 - 7 - 8等在它下面的计数。

<?PHP 
$currentdate = date('mdy'); 
    $this_time = date ("D, M j, Y H:i"); 
    $current_date = date('n-d-y'); 
    $this_time = date ("M j, Y H:i"); 

    echo"<table width=\"100%\" border=\"1\"><tr>"; 
$sql = "SELECT DISTINCT cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time) as Arrivals FROM admissions.patientinfo WHERE SCHDT ='$currentdate' GROUP BY cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time)"; 

     $stmt = sqlsrv_query($conn, $sql); 

     while($row = sqlsrv_fetch_array($stmt , SQLSRV_FETCH_ASSOC)) { 
      $Arrivals=$row['Arrivals']->format('H:i'); 

      echo"<td align=\"center\">$Arrivals "; 
     $sql = "SELECT DISTINCT PATNUM as Count FROM admissions.patientinfo WHERE SCHDT ='$currentdate' AND cast(cast(SCHTM as datetime)+cast(DURATION as datetime) as time) = '$Arrivals:00' "; 
      $query = sqlsrv_query($conn, $sql, array(), array("Scrollable" => 'static')); 

$row_count = sqlsrv_num_rows($query); 

      echo"<br />$row_count</td>"; 
     } 

    echo"</tr></table>" 
?> 
+0

SCHTM和DURATION是否不作为日期时间存储?这里需要铸造什么? – Simon

+0

他们都是时间(0)字段。铸造是我能够实现它的唯一方法。 –

回答

0
$sql = "WITH CTE1 
     AS 
     (SELECT DATEADD(HOUR, DATEPART(HOUR, CAST(SCHTM AS DATETIME)), 
     DATEPART(HOUR, CAST(DURATION AS DATETIME))) AS Arrivals FROM 
     admissions.patientinfo WHERE SCHDT ='$currentdate') 
     SELECT CONVERT(VARCHAR(8), Arrivals, 108) FROM CTE1 
     GROUP BY Arrivals"; 

这个查询应该会投两SCHTM和持续时间为DATETIME,增加了工作时间,并打印成列到达。我把它放在CTE中,只显示TIME并将其正确分组。

+0

我没有跟随CTE1 - 你如何得到CTE1?我把它放在sql中,它打破了一切。 –

+0

这就是我所拥有的。我的网页上没有任何结果。如果我直接在服务器上查询,我会得到结果。 (HOUR,DATEPART(HOUR,CAST(SCHTM AS DATETIME)),DATEPART(HOUR,CAST(DURATION AS DATETIME)))AS到达admissions.patientinfo WHERE SCHDT ='$ currentdate ') SELECT CONVERT(VARCHAR(8),Arrivals,108)FROM CTE1 GROUP BY Arrivals“; \t \t $ stmt = sqlsrv_query($ conn,$ sql); \t \t \t \t \t \t echo“ $ Arrivals”; \t \t而($行= sqlsrv_fetch_array($语句,SQLSRV_FETCH_ASSOC)){ \t \t \t $货品= $行[ '到达']; –