Access SQL Subquery to find a value from the previous year record (Max/Top minus 1)
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
All the advice I was able to locate doesn't seem to get at this (I am also trying to avoid a DLookup in the Table itself):
The table: Table has client records including a Year field, an AppointmentDate field and a ClientName field (which has identical values for each individual client across all years). (Table's client IDs for each record are expectedly random.)
In an MS Access Query that shows a sampling of this year's clients (by ClientName and delimited by a few other factors), need to also show the value of AppointmentDate from the previous year's (max Year minus 1) record for the same client.
Subquery attempts such as the below do not work:
LastYearApptDate:
(SELECT AppointmentDate FROM (SELECT (AppointmentDate) FROM Table ORDER BY Year DESC LIMIT 2) ORDER BY AppointmentDate ASC LIMIT 1)
Nor have the online suggested Top attempts shown the expected result.
(I realize Max is not supported in MS Access.)
Perhaps I am missing something about Access's syntax for a SQL subquery (via the "Zoom" Dialogue).
microsoft-access sql query
add a comment |
All the advice I was able to locate doesn't seem to get at this (I am also trying to avoid a DLookup in the Table itself):
The table: Table has client records including a Year field, an AppointmentDate field and a ClientName field (which has identical values for each individual client across all years). (Table's client IDs for each record are expectedly random.)
In an MS Access Query that shows a sampling of this year's clients (by ClientName and delimited by a few other factors), need to also show the value of AppointmentDate from the previous year's (max Year minus 1) record for the same client.
Subquery attempts such as the below do not work:
LastYearApptDate:
(SELECT AppointmentDate FROM (SELECT (AppointmentDate) FROM Table ORDER BY Year DESC LIMIT 2) ORDER BY AppointmentDate ASC LIMIT 1)
Nor have the online suggested Top attempts shown the expected result.
(I realize Max is not supported in MS Access.)
Perhaps I am missing something about Access's syntax for a SQL subquery (via the "Zoom" Dialogue).
microsoft-access sql query
add a comment |
All the advice I was able to locate doesn't seem to get at this (I am also trying to avoid a DLookup in the Table itself):
The table: Table has client records including a Year field, an AppointmentDate field and a ClientName field (which has identical values for each individual client across all years). (Table's client IDs for each record are expectedly random.)
In an MS Access Query that shows a sampling of this year's clients (by ClientName and delimited by a few other factors), need to also show the value of AppointmentDate from the previous year's (max Year minus 1) record for the same client.
Subquery attempts such as the below do not work:
LastYearApptDate:
(SELECT AppointmentDate FROM (SELECT (AppointmentDate) FROM Table ORDER BY Year DESC LIMIT 2) ORDER BY AppointmentDate ASC LIMIT 1)
Nor have the online suggested Top attempts shown the expected result.
(I realize Max is not supported in MS Access.)
Perhaps I am missing something about Access's syntax for a SQL subquery (via the "Zoom" Dialogue).
microsoft-access sql query
All the advice I was able to locate doesn't seem to get at this (I am also trying to avoid a DLookup in the Table itself):
The table: Table has client records including a Year field, an AppointmentDate field and a ClientName field (which has identical values for each individual client across all years). (Table's client IDs for each record are expectedly random.)
In an MS Access Query that shows a sampling of this year's clients (by ClientName and delimited by a few other factors), need to also show the value of AppointmentDate from the previous year's (max Year minus 1) record for the same client.
Subquery attempts such as the below do not work:
LastYearApptDate:
(SELECT AppointmentDate FROM (SELECT (AppointmentDate) FROM Table ORDER BY Year DESC LIMIT 2) ORDER BY AppointmentDate ASC LIMIT 1)
Nor have the online suggested Top attempts shown the expected result.
(I realize Max is not supported in MS Access.)
Perhaps I am missing something about Access's syntax for a SQL subquery (via the "Zoom" Dialogue).
microsoft-access sql query
microsoft-access sql query
edited Feb 12 at 2:29
JakeGould
32.9k10100142
32.9k10100142
asked Feb 12 at 2:19
StumpedStumped
207
207
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
Below solved by:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));
Now the challenge is to merge this with Client fields (like AppointmentDate) from the Table per the most recent year - and to show this for each client. Is there any way to do this without a UNION?
add a comment |
Well, after a lot of different attempts at just entering SQL into Access, still missing something important:
Here are the Pieces so far (okay, so MAX appears to work despite documentation that said otherwise):
SELECT MAX(Table.Year)
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)
The above correctly selects the previous year (generally for Table).
The previous year for a particular client can be isolated thus:
SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));
Where "Client" is, for now, just entered manually.
Now the challenge is to select the AppointmentDate value from the previous year's record by way of a common ClientName (and the above PreviousYear value for each ClientName - the PreviousYear values will be different for each Client) - this is where I seem to be missing something important:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));
Not sure what's missing, tried: FROM Table t ...
Any insights would be appreciated - thanks!
add a comment |
Your Answer
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "3"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1404667%2faccess-sql-subquery-to-find-a-value-from-the-previous-year-record-max-top-minus%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Below solved by:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));
Now the challenge is to merge this with Client fields (like AppointmentDate) from the Table per the most recent year - and to show this for each client. Is there any way to do this without a UNION?
add a comment |
Below solved by:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));
Now the challenge is to merge this with Client fields (like AppointmentDate) from the Table per the most recent year - and to show this for each client. Is there any way to do this without a UNION?
add a comment |
Below solved by:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));
Now the challenge is to merge this with Client fields (like AppointmentDate) from the Table per the most recent year - and to show this for each client. Is there any way to do this without a UNION?
Below solved by:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client]) AND ((Year=(SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName=[Client]))))))));
Now the challenge is to merge this with Client fields (like AppointmentDate) from the Table per the most recent year - and to show this for each client. Is there any way to do this without a UNION?
edited Mar 23 at 23:31
answered Mar 23 at 22:48
StumpedStumped
207
207
add a comment |
add a comment |
Well, after a lot of different attempts at just entering SQL into Access, still missing something important:
Here are the Pieces so far (okay, so MAX appears to work despite documentation that said otherwise):
SELECT MAX(Table.Year)
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)
The above correctly selects the previous year (generally for Table).
The previous year for a particular client can be isolated thus:
SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));
Where "Client" is, for now, just entered manually.
Now the challenge is to select the AppointmentDate value from the previous year's record by way of a common ClientName (and the above PreviousYear value for each ClientName - the PreviousYear values will be different for each Client) - this is where I seem to be missing something important:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));
Not sure what's missing, tried: FROM Table t ...
Any insights would be appreciated - thanks!
add a comment |
Well, after a lot of different attempts at just entering SQL into Access, still missing something important:
Here are the Pieces so far (okay, so MAX appears to work despite documentation that said otherwise):
SELECT MAX(Table.Year)
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)
The above correctly selects the previous year (generally for Table).
The previous year for a particular client can be isolated thus:
SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));
Where "Client" is, for now, just entered manually.
Now the challenge is to select the AppointmentDate value from the previous year's record by way of a common ClientName (and the above PreviousYear value for each ClientName - the PreviousYear values will be different for each Client) - this is where I seem to be missing something important:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));
Not sure what's missing, tried: FROM Table t ...
Any insights would be appreciated - thanks!
add a comment |
Well, after a lot of different attempts at just entering SQL into Access, still missing something important:
Here are the Pieces so far (okay, so MAX appears to work despite documentation that said otherwise):
SELECT MAX(Table.Year)
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)
The above correctly selects the previous year (generally for Table).
The previous year for a particular client can be isolated thus:
SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));
Where "Client" is, for now, just entered manually.
Now the challenge is to select the AppointmentDate value from the previous year's record by way of a common ClientName (and the above PreviousYear value for each ClientName - the PreviousYear values will be different for each Client) - this is where I seem to be missing something important:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));
Not sure what's missing, tried: FROM Table t ...
Any insights would be appreciated - thanks!
Well, after a lot of different attempts at just entering SQL into Access, still missing something important:
Here are the Pieces so far (okay, so MAX appears to work despite documentation that said otherwise):
SELECT MAX(Table.Year)
FROM Table
WHERE Table.Year<(SELECT MAX(Table.Year) FROM Table)
The above correctly selects the previous year (generally for Table).
The previous year for a particular client can be isolated thus:
SELECT Max(Table.Year) AS PreviousYear
FROM Table
WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))));
Where "Client" is, for now, just entered manually.
Now the challenge is to select the AppointmentDate value from the previous year's record by way of a common ClientName (and the above PreviousYear value for each ClientName - the PreviousYear values will be different for each Client) - this is where I seem to be missing something important:
SELECT Table.AppointmentDate
FROM Table
WHERE (((Table.ClientName=[Client])) AND ((Table.Year)=(SELECT MAX(Table.Year) AS LastDueDate FROM Table WHERE (((Table.Year)<(SELECT MAX(Table.Year) FROM Table WHERE ((Table.ClientName)=[Client]))))));
Not sure what's missing, tried: FROM Table t ...
Any insights would be appreciated - thanks!
answered Mar 23 at 22:24
StumpedStumped
207
207
add a comment |
add a comment |
Thanks for contributing an answer to Super User!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f1404667%2faccess-sql-subquery-to-find-a-value-from-the-previous-year-record-max-top-minus%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown