Thank you for all the help and suggestions.
Here is what I ended up doing....
Simple query to return all the data. Then write the c# code to mangle it to what I really want. It was just easier for my skillset that way.
- Visitors can check out the Forum FAQ by clicking this link. You have to register before you can post: click the REGISTER link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below. View our Forum Privacy Policy.
- Want to receive the latest contracting news and advice straight to your inbox? Sign up to the ContractorUK newsletter here. Every sign up will also be entered into a draw to WIN £100 Amazon vouchers!
Reply to: SQL MAX
Collapse
You are not logged in or you do not have permission to access this page. This could be due to one of several reasons:
- You are not logged in. If you are already registered, fill in the form below to log in, or follow the "Sign Up" link to register a new account.
- You may not have sufficient privileges to access this page. Are you trying to edit someone else's post, access administrative features or some other privileged system?
- If you are trying to post, the administrator may have disabled your account, or it may be awaiting activation.
Logging in...
Previously on "SQL MAX"
Collapse
-
You have been very helpful. I have also been diverted from it so it is tomorrow. I will use a union.Originally posted by LondonManc View PostYou could do that as either a union query for the two types of event or use it as one daase expressions for each. I'd have to invoice you if I spent any longer on it though
Leave a comment:
-
That's what my query does as it orders by deployment descending and groups by batch_id.... I can't be sure that's the most efficient query at a glance but it yields the results.
Leave a comment:
-
Yes, you're missing the bit where the OP only wants the top deployment for each batch type.Originally posted by stryker007 View PostAm I missing something? because simply this seems to work fine.
select d.batch_id, d.deployment, b.batch_type from deployment d
left join batch b on d.batch_id = b.batch_id
group by d.batch_id
order by d.deployment DESC
oops.. albeit under mysql :-)
Leave a comment:
-
Am I missing something? because simply this seems to work fine.
select d.batch_id, d.deployment, b.batch_type from deployment d
left join batch b on d.batch_id = b.batch_id
group by d.batch_id
order by d.deployment DESC
oops.. albeit under mysql :-)
Leave a comment:
-
Including a deployed flag (You may need to change < to <= if today = deployed)Originally posted by LondonManc View PostGive this a try then:
select a.batch_id, a.deployment, b.batch_type
from deployment a join batch b on a.batch_id=b.batch_id
join
(select b1.batch_type, max(a1.deployment) maxdeploy
from deployment a1 join batch b1 on a1.batch_id=b1.batch_id
group by b1.batch_type) c
on b.batch_type=c.batch_type and a.deployment=c.maxdeploy
SQL Fiddle
Leave a comment:
-
Personally I would use a temp table. Or at least heavily comment the sql.
Far more maintainable.
Remember to use KISS methodology...
Leave a comment:
-
You could do that as either a union query for the two types of event or use case expressions for each. I'd have to invoice you if I spent any longer on it thoughOriginally posted by ASB View PostVery true. No I (intentionally) didn't. :-)
What I actually need in the final query is (for each batch type), the last one that has actually been deployed and all those that are yet to be deployed.
There are in fact various other tables where data is collected from in the real query I am trying to end up with.
But I have my start pointer thank you.
Leave a comment:
-
Very true. No I (intentionally) didn't. :-)Originally posted by LondonManc View PostTo exclude forward dates, you just need an extra condition
Add this line before the one that starts "group by...." :
where a1.deployment < getdate()
The query includes future dates by default because you didn't specify that there could be future dates
What I actually need in the final query is (for each batch type), the last one that has actually been deployed and all those that are yet to be deployed.
There are in fact various other tables where data is collected from in the real query I am trying to end up with.
But I have my start pointer thank you.
Leave a comment:
-
To exclude forward dates, you just need an extra conditionOriginally posted by ASB View PostI will give that a go tomorrow and then worry about the union I will need to add all the records with forwards dates.
Add this line before the one that starts "group by...." :
where a1.deployment < getdate()
The query includes future dates by default because you didn't specify that there could be future dates
Leave a comment:
-
I will give that a go tomorrow and then worry about the union I will need to add all the records with forwards dates.Originally posted by LondonManc View PostGive this a try then:
select a.batch_id, a.deployment, b.batch_type
from deployment a join batch b on a.batch_id=b.batch_id
join
(select b1.batch_type, max(a1.deployment) maxdeploy
from deployment a1 join batch b1 on a1.batch_id=b1.batch_id
group by b1.batch_type) c
on b.batch_type=c.batch_type and a.deployment=c.maxdeploy
Leave a comment:
-
Give this a try then:Originally posted by ASB View PostSQL server 2008.
select a.batch_id, a.deployment, b.batch_type
from deployment a join batch b on a.batch_id=b.batch_id
join
(select b1.batch_type, max(a1.deployment) maxdeploy
from deployment a1 join batch b1 on a1.batch_id=b1.batch_id
group by b1.batch_type) c
on b.batch_type=c.batch_type and a.deployment=c.maxdeploy
Leave a comment:
-
I had tried that (or at least what I believe to be logically the same) but it still returns each individual row.
Annoyingly of course I could easily just return the entire data set and process that in the consumer but I'm not supposed to do that.
Leave a comment:
-
What RDBMS are you on, Oracle, SQL Server, Teradata?Originally posted by ASB View PostI wish I didn't have to write this with SQL. But never mind.
I have a table:-
Deployment.
It contains:-
batch id (int)
deployment (datetime)
e.g.
1,13/09/2015
2,14/09/2015
3,15/09/2015
4,10/09/2015
2,11/09/2015
3,12/09/2015
Also:-
Batch.
Containing
batch id (int)
batch type(int)
I am trying to return the batch id, deployment, type
But I only want to return the most recent row for each batch type.
So I am completely stuck; mainly because I know stuff all about SQL. But the join would appear to need some sort of select max(deployment). No idea what though.
Leave a comment:
- Home
- News & Features
- First Timers
- IR35 / S660 / BN66
- Employee Benefit Trusts
- Agency Workers Regulations
- MSC Legislation
- Limited Companies
- Dividends
- Umbrella Company
- VAT / Flat Rate VAT
- Job News & Guides
- Money News & Guides
- Guide to Contracts
- Successful Contracting
- Contracting Overseas
- Contractor Calculators
- MVL
- Contractor Expenses
Advertisers
Contractor Services
CUK News
- Why contractors keep putting off their pension (and why I'm one of them) Aug 4 02:43
- HMRC loan charge settlement offer: 3 things to check before you sign Today 07:41
- HMRC standstill agreements extended to 72 months: why the term's doubled, and what to check before signing Jul 31 05:53
- Who owns the loans? Inside the mystery of the loan charge recall scandal Jul 30 06:20
- Umbrella company winding-up petitions in 2026: the practical guide for contractors Jul 29 05:29
- Payments on Account deadline: what contractors must do before July 31st — maybe for the final few times Jul 28 08:01
- Andy Burnham's first 100 days: five things contractors need from the new PM Jul 27 00:53
- Starmer vs Burnham on housing: What their rival plans mean for your contractor mortgage Jul 22 00:59
- Burnham's housing vision vs. Starmer's home-buying reforms: what it means for your contractor mortgage Jul 22 00:59
- In Khalil v Innovate Transport, a limited company contractor wasn’t a worker and was on £2.30 — not £230 Jul 21 07:58

Leave a comment: