Sql server SQL查询选择
我正在使用MSSQL服务器和Nodejs与NPMSSQL。我需要建立一个查询 说明: 需要从表中选择今天未收到电子邮件或从未收到电子邮件的用户 查询示例: 然后: 需要选择用户最喜欢的品牌。我正在做异步。代码如下所示:Sql server SQL查询选择,sql-server,Sql Server,我正在使用MSSQL服务器和Nodejs与NPMSSQL。我需要建立一个查询 说明: 需要从表中选择今天未收到电子邮件或从未收到电子邮件的用户 查询示例: 然后: 需要选择用户最喜欢的品牌。我正在做异步。代码如下所示: function getUserSalesByMalls(params, callback) { var usersArray = []; var targetID = params.type; async.eachLimit(para
function getUserSalesByMalls(params, callback) {
var usersArray = [];
var targetID = params.type;
async.eachLimit(params, 1, function (user, cb) {
sqlRequest("
SELECT TOP 1 bts.BrandCategoryID as title, b.title as brand, b.id
FROM dbo.Users st JOIN SaleView ss ON (st.ID=ss.userID)
JOIN Sales sa ON (sa.ID=ss.SaleID)
JOIN Brands b ON (b.ID=sa.BrandID)
JOIN KEY_BrandcategoryToSale bts ON (bts.SaleID=sa.ID)
WHERE st.ID="+**user.id**+"
GROUP BY bts.BrandCategoryID, b.title, b.id
ORDER BY COUNT(bts.BrandCategoryID) desc",
function (err, result) {
user.favBrand = result;
console.log(user);
usersArray.push(user);
cb();
})
}, function () {
callback(null, usersArray)
})
}
然后:
我需要按用户最喜欢的品牌选择在14天内浏览次数最多且用户从未见过的前2名销售:
function getUserSalesByMalls(params, callback) {
var usersArray = [];
var targetID = params.type;
async.eachLimit(params, 1, function (user, cb) {
sqlRequest("
`SELECT DISTINCT TOP 2 s.id as saleId, s.title, s.description, s.imageUrl, count(sv.saleId) as mostViewsPeriod14Days, s.guid, stm.mallId as mallId, brand.title as brandTitle FROM dbo.Sales s
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId
INNER JOIN dbo.Brands brand ON s.brandID = brand.id
WHERE (sv.date <= GETDATE())
AND (sv.date >= GETDATE() - 14) AND s.isActive = 1 AND s.isHotSale = 1 AND b.id = "+user.favBrandId+"
AND s.id NOT IN (SELECT DISTINCT sv2.saleId FROM dbo.SaleView sv2
WHERE sv2.userId = "+user.id+")
GROUP BY s.id, s.title, s.description, s.imageUrl, s.guid, stm.mallId, brand.title
ORDER BY COUNT(sv.saleId) DESC`",
function (err, result) {
user.salesByBrand = result;
console.log(user);
usersArray.push(user);
cb();
})
}, function () {
callback(null, usersArray)
})
}
function getUserSalesByMalls(params, callback) {
var usersArray = [];
var targetID = params.type;
async.eachLimit(params, requestPerLimit, function (user, cb) {
setTimeout(function () {
sqlRequest("SELECT DISTINCT TOP 3 s.id as saleId, s.title, s.description, s.imageUrl, count(sv.saleId) as mostViewsPeriod14Days, s.guid, stm.mallId as mallId, brand.title as brandTitle
FROM dbo.Sales s
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId
INNER JOIN dbo.Brands brand ON s.brandID = brand.id
WHERE (sv.date <= GETDATE())
AND (sv.date >= GETDATE() - 14)
AND s.isActive = 1 AND s.isHotSale = 1
AND stm.mallId = "+user.mallId+"
AND s.id NOT IN (SELECT DISTINCT sv2.saleId
FROM dbo.SaleView sv2
WHERE sv2.userId = "+user.id+")
GROUP BY s.id, s.title, s.description, s.imageUrl, s.guid, stm.mallId, brand.title
ORDER BY COUNT(sv.saleId) DESC", function (err, result) {
if (!result) {
cb();
} else if (result.length == 3) {
sqlInsert("INSERT INTO UserEmailHistory (userID,sDate,targetID) VALUES (" + user.id + ",CONVERT(datetime,DATEADD(hour," + utc_diff + ",getdate()))," + targetID + ")");
console.log("USER WITH 3 SALES BY MALL");
user.sales = result;
console.log(user);
usersArray.push(user);
cb();
}
})
}, requestPerMillisecond)
}, function () {
callback(null, usersArray)
})
}
最后一个:我需要根据商城id为用户选择3条建议,这些建议在14天内浏览次数最多,但用户从未见过:
function getUserSalesByMalls(params, callback) {
var usersArray = [];
var targetID = params.type;
async.eachLimit(params, 1, function (user, cb) {
sqlRequest("
`SELECT DISTINCT TOP 2 s.id as saleId, s.title, s.description, s.imageUrl, count(sv.saleId) as mostViewsPeriod14Days, s.guid, stm.mallId as mallId, brand.title as brandTitle FROM dbo.Sales s
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId
INNER JOIN dbo.Brands brand ON s.brandID = brand.id
WHERE (sv.date <= GETDATE())
AND (sv.date >= GETDATE() - 14) AND s.isActive = 1 AND s.isHotSale = 1 AND b.id = "+user.favBrandId+"
AND s.id NOT IN (SELECT DISTINCT sv2.saleId FROM dbo.SaleView sv2
WHERE sv2.userId = "+user.id+")
GROUP BY s.id, s.title, s.description, s.imageUrl, s.guid, stm.mallId, brand.title
ORDER BY COUNT(sv.saleId) DESC`",
function (err, result) {
user.salesByBrand = result;
console.log(user);
usersArray.push(user);
cb();
})
}, function () {
callback(null, usersArray)
})
}
function getUserSalesByMalls(params, callback) {
var usersArray = [];
var targetID = params.type;
async.eachLimit(params, requestPerLimit, function (user, cb) {
setTimeout(function () {
sqlRequest("SELECT DISTINCT TOP 3 s.id as saleId, s.title, s.description, s.imageUrl, count(sv.saleId) as mostViewsPeriod14Days, s.guid, stm.mallId as mallId, brand.title as brandTitle
FROM dbo.Sales s
INNER JOIN dbo.SalesToMall stm ON s.id = stm.saleId
INNER JOIN dbo.SaleView sv ON s.id = sv.saleId
INNER JOIN dbo.Brands brand ON s.brandID = brand.id
WHERE (sv.date <= GETDATE())
AND (sv.date >= GETDATE() - 14)
AND s.isActive = 1 AND s.isHotSale = 1
AND stm.mallId = "+user.mallId+"
AND s.id NOT IN (SELECT DISTINCT sv2.saleId
FROM dbo.SaleView sv2
WHERE sv2.userId = "+user.id+")
GROUP BY s.id, s.title, s.description, s.imageUrl, s.guid, stm.mallId, brand.title
ORDER BY COUNT(sv.saleId) DESC", function (err, result) {
if (!result) {
cb();
} else if (result.length == 3) {
sqlInsert("INSERT INTO UserEmailHistory (userID,sDate,targetID) VALUES (" + user.id + ",CONVERT(datetime,DATEADD(hour," + utc_diff + ",getdate()))," + targetID + ")");
console.log("USER WITH 3 SALES BY MALL");
user.sales = result;
console.log(user);
usersArray.push(user);
cb();
}
})
}, requestPerMillisecond)
}, function () {
callback(null, usersArray)
})
}
我的问题是:
是否有任何方法可以合并并只构建一个查询,并获取有关我的解释的所有必要数据 请参阅“如何改进问题:您确实需要改进您的问题”上的“了解”链接。