简体   繁体   中英

How group primary keys with different value but same name and using datediff

So I have three tables:

Guest can make a reservation and in the reservation table you can see what kind of reservation the guest made based on the primary key 'pID'. I want to show only the reservation of luxe rooms and the amount of days the guest spends there. I don't even know what I am doing is the right way. I hope someone can help me.

reservation:

pID              |begindate    | enddate     |   
------------------------------------------------------
COD12            | 2014-07-15  | 2014-07-18  |
COD400           | 2014-07-20  | 2014-07-21  |
KOD12            | 2014-07-01  | 2014-07-07  |

Luxe room table:


pID              |city         |    
---------------------------------
COD12            | Corona      | 
COD400           | Corona      | 
KOD12            | Kentucky    | 

Small room table:

pID              |city         |    
---------------------------------
COD600           | Corona      |
MOD10            | Madrid      |
KOD20            | Kentucky    | 

What I want: Amount of days spent from guest in Luxe rooms, note that Corona has two rooms:

city             |amountofdays |    
---------------------------------
Corona           | 4           |
Kentucky         | 6           |


What I tried to do:

SELECT datediff(reservation.enddate,reservation.begindate) as amountofdays, luxeroom.city FROM reservation
INNER JOIN luxeroom ON reservation.pID = luxeroom.pID
GROUP BY luxeroom.pID, luxeroom.city; 

this resulted in:

city             |amountofdays |    
---------------------------------
Corona           | 3           |
Corona           | 1           |
Kentucky         | 6           |

Fix the group by :

SELECT sum(datediff(r.enddate, r.begindate)) as amountofdays, l.city
FROM reservation r JOIN
     luxeroom l
     ON r.pID = l.pID
GROUP BY l.city; 

You want one room per city, so the GROUP BY should only include city .

You need group by and sum

SELECT sum(datediff(a.enddate, a.begindate)) as amountofdays, b.city
FROM reservation a 
JOIN luxeroom b  ON a.pID = b.pID
GROUP BY b.city; 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM