Evet while ile verileri kullanmak üzere dizide toplaman gerekiyor bu arada bize gereken formata sokuyoruz.
Tarihi aynı verileri alt dizide bir araya topluyoruz.
<?php
$table = [];
while($row2 = $result->fetch_assoc()){
$table[$row2['giris']][] = $row2;
}
Doğru yolda ilerlerdiğimi düşünüyorum

while ve foreach çalıştı
Başta bunu tek gelecek veri üzerinde denedim (adım adım gitmek için)
<?
$table=[];
while ($row2=$result->fetch_assoc()){
$table[$row2['alis_tarih']][]=$row2;
}
foreach ($table as $tr){
?>
<tbody>
<? echo '<tr>';
echo '<td rowspan="'.count($tr).'">'.$tr[0]['alis_tarih'].'</td>';
echo '<td rowspan="'.count($tr).'">'.$tr[0]['alis_tarih'].'</td>';
echo '<td>'.implode('<br>', array_column($tr, 'alis_tarih')).'</td>';
echo '</tr>';
}
?>
</tbody>
</table>
gelis tarihi doğru geldi teslim tarihi de doğru geldi (aslında yanlış ama doğru kabul edelim) işlem kısmı da 3 satır olmalı çünkü o tarihte3 satırlık işlem var orası da doğru
Yalnız bir syntax hatası yaptığım için $table[$row2['alis_tarih']][]=$row2; bölümünü diğer verilerle dolduramadım. yani orada ilk verdiğin örnekteki gibi giris,teslim ve islem kısımlarını ekleyemedim oradaki doğru yazım nasıl olmalı?