Ok, j'ai une sous-requête avec laquelle j'essaie de travailler et qui nécessitait une réponse à une question compliquée. Un outil SQL est utilisé pour générer des rapports. Avec cet outil, vous pouvez sélectionner des dates tant que la date est dans l'instruction select externe. Ainsi, vous pouvez utiliser cet outil pour sélectionner une plage de dates, par exemple, à partir d'une simple déclaration de sélection comme ceci:Date MySQL entre sous-requêtes Question
select date_entered, name from opportunities
Cela fonctionne très bien avec l'outil.
Cependant, j'ai une exigence SQL où j'ai besoin que chaque colonne soit sa propre instruction SQL (essentiellement, une série de sous-requêtes). Ma question est - y at-il de toute façon qu'une sous-requête utilise la date de la sélection initiale? Voici un exemple d'une instruction select que j'ai à faire:
SELECT
(
SELECT
count(
opportunities.id) AS "count_for_opp_id"
FROM
opportunities
LEFT JOIN opportunities_cstm ON opportunities.id = opportunities_cstm.id_c
WHERE
opportunities.deleted = '0'
AND ((curdate() - interval 0 day) <= opportunities.date_entered)
AND opportunities_cstm.lead_category_c = 'GM Internet'
AND opportunities_cstm.lead_type_c = 'Sales'
AND opportunities_cstm.partner_id_c LIKE '41%'
OR opportunities_cstm.partner_id_c LIKE '42%'
OR opportunities_cstm.partner_id_c LIKE '43%'
OR opportunities_cstm.partner_id_c LIKE '44%'
OR opportunities_cstm.partner_id_c LIKE '45%'
OR opportunities_cstm.partner_id_c LIKE '47%'
OR opportunities_cstm.partner_id_c LIKE '48%'
OR opportunities_cstm.partner_id_c LIKE '49%'
OR opportunities_cstm.lead_sub_type_c = 'GM 3rd Party'
)AS TOT_DIV_THIRD_PARTY_SALES_LEADS,
(
SELECT
count(opportunities.id) AS "count_for_opp_id"
FROM
opportunities left
JOIN opportunities_cstm ON opportunities.id = opportunities_cstm.id_c
WHERE
opportunities.deleted = '0'
AND ((curdate() - interval 0 day) <= opportunities.date_entered)
AND opportunities_cstm.lead_category_c = 'Dealer Web'
AND opportunities_cstm.lead_type_c = 'Sales'
AND opportunities_cstm.lead_sub_type_c = 'GM Dealer Website'
OR opportunities_cstm.lead_sub_type_c = 'DMA Landing Page'
)AS TOT_DEALER_WEBSITE_DMA_SALES_LEADS,
(
SELECT
count(opportunities.id) AS "count_for_opp_id"
FROM
opportunities left
JOIN opportunities_cstm ON opportunities.id = opportunities_cstm.id_c
JOIN leads_handling_objectives
WHERE
opportunities.deleted = '0'
AND ((curdate() - interval 0 day) <= opportunities.date_entered)
AND opportunities_cstm.lead_category_c = 'GM Internet'
AND opportunities_cstm.partner_id_c LIKE '41%'
OR opportunities_cstm.partner_id_c LIKE '42%'
OR opportunities_cstm.partner_id_c LIKE '43%'
OR opportunities_cstm.partner_id_c LIKE '44%'
OR opportunities_cstm.partner_id_c LIKE '45%'
OR opportunities_cstm.partner_id_c LIKE '47%'
OR opportunities_cstm.partner_id_c LIKE '48%'
OR opportunities_cstm.partner_id_c LIKE '49%'
OR opportunities_cstm.lead_sub_type_c = 'GM 3rd Party'
AND opportunities_cstm.time_followup_c <= leads_handling_objectives.resp_time_obj
AND opportunities_cstm.make_c = leads_handling_objectives.makes_carried
AND opportunities_cstm.time_followup_c IS NOT NULL
)AS NUM_OF_LEADS_RESP_ONTIME_DIVISIONAL_THIRD_PARTY,
(
SELECT
count(opportunities.id) AS "count_for_opp_id"
FROM
opportunities left
JOIN opportunities_cstm ON opportunities.id = opportunities_cstm.id_c
JOIN leads_handling_objectives
WHERE
opportunities.deleted = '0'
AND ((curdate() - interval 0 day) <= opportunities.date_entered)
AND opportunities_cstm.lead_category_c = 'Dealer Web'
AND opportunities_cstm.lead_sub_type_c = 'GM Dealer Website'
OR opportunities_cstm.lead_sub_type_c = 'DMA Landing Page'
AND opportunities_cstm.time_followup_c <= leads_handling_objectives.resp_time_obj
AND opportunities_cstm.make_c = leads_handling_objectives.makes_carried
AND opportunities_cstm.time_followup_c IS NOT NULL
)AS NUM_OF_LEADS_RESP_ONTIME_DEALERWEBSITE_DMA
Si vous regardez cette requête, vous remarquerez la curdate ... < = partie date_entered de la sous-requête. Je dois vraiment avoir ceci sur la couche externe en quelque sorte de l'instruction select. Cependant, si je mets ceci sur la couche externe, je ne suis pas sûr de savoir comment faire en sorte que la sous-requête utilise la plage de dates de cette façon. Je sais que c'est une question compliquée mais - y aurait-il des conseils de tous ceux qui sont là-bas? Merci!
(note:.. En outre, cela ne peut pas être une procédure ou une fonction Il doit être une instruction select ou une vue de travailler avec l'outil de reporting)
un plus modifier - un extrait plus facile (plus petit) de SQL ci-dessus peut se concentrer ici:
SELECT
(SELECT
count(
opportunities.id) AS "count_for_opp_id"
FROM
opportunities
LEFT JOIN opportunities_cstm ON opportunities.id = opportunities_cstm.id_c
WHERE
opportunities.deleted = '0'
AND ((curdate() - interval 0 day) <= opportunities.date_entered)
AND opportunities_cstm.lead_category_c = 'GM Internet'
AND opportunities_cstm.lead_type_c = 'Sales'
) AS TOT_DIV_THIRD_PARTY_SALES_LEADS
celui-ci pourrait être ci-dessus plus facile à lire et plus facile à diagnostiquer à long terme.
Merci!
Holy shiz ... = O – NullUserException
Pourquoi avez-vous tous ces _utf8 partout? N'est-il pas plus facile de définir correctement les paramètres de classement? – NullUserException
Il n'y a aucun moyen de corriger tout cela, mais ** s'il vous plaît ** savoir quand utiliser les crochets. C'est trop verbeux, ce qui ne rendra pas l'aide facile. Et c'est un cauchemar à maintenir - une parenthèse incorrecte ne vous donnera pas une erreur de syntaxe. –