I am beginner in sql. Anyone please tell me the problem of my customised query.
x
select *
from Follow_My_Doct.tbl_hospital_registration h
INNER JOIN Follow_My_Doct.tbl_subscribed_packages s
ON s.hospitalId = h.id
AND s.active = 1
AND ( select max(sp.expireDate), sp.hospitalId
from Follow_My_Doct.tbl_subscribed_packages sp
where sp.active = 1
group by sp.hospitalId )
where h.hospital_active = 1
Error Code: 1241. Operand should contain 1 column(s)
Subscription table
hospital Id expireDate
145 2021-07-10
146 2021-06-10
147 2021-09-10
146 2021-10-10
Advertisement
Answer
You should put that subquery with the max and group by inside an INNER JOIN clause.
select *
from Follow_My_Doct.tbl_hospital_registration h
INNER JOIN ( select max(sp.expireDate) maxexpiredate, sp.hospitalId
from Follow_My_Doct.tbl_subscribed_packages sp
where sp.active = 1
group by sp.hospitalId ) as s
ON s.hospitalId = h.id
where h.hospital_active = 1
Since I don’t have your data tables, I made up one environment to test that query by using table variables. The example below is for SQL Server, but the query works fine for MySQL, which currently I don’t have installed on my machine.
declare @tbl_subscribed_packages TABLE(
hospitalId int,
active bit,
expiredate datetime
)
declare @tbl_hospital_registration table(
id int,
hospital_active bit)
Now populate tables with data:
insert @tbl_hospital_registration
values (145,1),(146,1),(147,1)
insert @tbl_subscribed_packages
values (145,1,'2021-07-10')
,(146,1,'2021-06-10')
,(147,1,'2021-09-10')
,(146,1,'2021-10-10')
Then, I test the query against these data
select *
from @tbl_hospital_registration h
INNER JOIN ( select max(sp.expireDate) maxexpiredate, sp.hospitalId
from @tbl_subscribed_packages sp
where sp.active = 1
group by sp.hospitalId ) as s
ON s.hospitalId = h.id
where h.hospital_active = 1
Note that using subquery as a view in INNER JOIN, I should add an alias name for max(expireDate) column. The result is:
id | hospital_active | maxexpiredate | hospitalId |
---|---|---|---|
145 | 1 | 2021-07-10 00:00:00.000 | 145 |
146 | 1 | 2021-10-10 00:00:00.000 | 146 |
147 | 1 | 2021-09-10 00:00:00.000 | 147 |
Is that what you want?