Sql server SQL查询选择

Sql server SQL查询选择,sql-server,Sql Server,我正在使用MSSQL服务器和Nodejs与NPMSSQL。我需要建立一个查询 说明: 需要从表中选择今天未收到电子邮件或从未收到电子邮件的用户 查询示例: 然后: 需要选择用户最喜欢的品牌。我正在做异步。代码如下所示: function getUserSalesByMalls(params, callback) { var usersArray = []; var targetID = params.type; async.eachLimit(para

我正在使用MSSQL服务器和Nodejs与NPMSSQL。我需要建立一个查询

说明: 需要从表中选择今天未收到电子邮件或从未收到电子邮件的用户

查询示例:

然后: 需要选择用户最喜欢的品牌。我正在做异步。代码如下所示:

    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)
      })
    }
我的问题是:
是否有任何方法可以合并并只构建一个查询,并获取有关我的解释的所有必要数据

请参阅“如何改进问题:您确实需要改进您的问题”上的“了解”链接。