我正在通过sql查询从access db中检索记录。原始查询检索最新的日期数据。但是,如果我想运行该工具,例如2012年3月3日,它仍然采用最新的数据。但我需要的数据等于2012年3月3日或接近2012年3月3日但不超过日期的日期。例如,如果3/3/2012不可用且数据库中的3/2/2012可用,它应该选择该日期。修改后的查询如下所示。它给出了保留字拼写错误或错位的错误..等等。你能帮我查询一下吗?在查询中,trundate是从我的程序输入的。我的查询现在是:
CString sel =“SELECT I.ProductType,I.Spread,I.DateUpdated FROM MortgageRateSpreads I,(选择ProductType,MAX(DateUpdated)AS DateUpdated1”;
sel + =“其中DateUpdated< =”;
sel + = tRunDate.Format(“{ts'%Y-%m-%d'}”);
CRecordset set(& pdatabase);
try
{
double val;
CDBVariant var;
if (set.Open(CRecordset::forwardOnly, sel/*, CRecordset::readOnly*/))
{
m_Log->Log("recordset is open");
while (!set.IsEOF())
我的选择是:
sel "SELECT I.ProductType, I.Spd, I.DateUpdated FROM MRSpds I,(select ProductType, MAX(DateUpdated) AS DateUpdated1where DateUpdated <={ts '2012-02-08' } FROM MRSpds GROUP BY ProductType) T WHERE I.ProductType = T.ProductType AND I.DateUpdated =T.DateUpdated1"
谢谢
{
答案 0 :(得分:0)
我认为ms访问喜欢日期周围的#符号。 DateUpdated&LT =#2012年3月3日# 在sel + =“where ...”中你需要一个空格,比如sel + =“where ......” SQL语句中的日期字符串应如下所示 DateUpdated&lt; =#3/3/2012#
此外,嵌套的select语句似乎在where子句后面有from子句。我认为它应该像
(选择ProductType,MAX(DateUpdated)AS DateUpdated1 FROM MRSpds,其中DateUpdated&lt; =#2012-02-08#GROUP BY ProductType)T