SQL语句向客户显示,2018年首次购买了前几年从未购买过的产品系列

时间:2018-10-17 16:02:13

标签: mysql sql

我的数据库在MySQL服务器上运行。 SQL知识:初学者。

数据说明: 我的数据库只有1个包含销售数据的表。该查询的相关列为:

  • 年份(smallint)
  • 客户(文本)
  • 产品系列(文本)
  • 总销售额(EUR)(双精度)

现在,我想要一个SQL语句向我显示一张客户表,这些客户是前几年从未购买过的首次购买产品系列的客户。

因此,我们假设有一位客户在前几年购买了产品系列1,2,3,并在2018年首次购买了产品系列4。在之前的年份和2018年再次购买产品系列4的客户将不会显示在结果表中。结果表应显示:

  • 年份(当前年份)
  • 客户
  • Product_Series(首次购买)
  • 总销售额

这是我到目前为止的拙劣代码。有条件的话就完全撞到石头了。

class Databasehandle
{
    public DataTable SelectQuery(string query)
    {
        SQLiteDataAdapter ad;
        DataTable dt = new DataTable();
        using (SQLiteConnection sqlite = new SQLiteConnection(Loadconnectionstring()))
        {
            try
            {
                SQLiteCommand cmd;
                sqlite.Open();
                cmd = sqlite.CreateCommand();
                cmd.CommandText = query;
                ad = new SQLiteDataAdapter(cmd);
                ad.Fill(dt);
            }
            catch (SQLiteException ex)
            {
                Console.WriteLine(ex);
            }
            sqlite.Close();
        }
        return dt;
    }
    private static string Loadconnectionstring(string id = "default")
    {
        return ConfigurationManager.ConnectionStrings[id].ConnectionString; 
    }
}

注意:该表没有唯一键。希望它不会使事情复杂化。如果我错过了任何重要信息,请给我提示。

感谢您提供任何帮助或提示。

1 个答案:

答案 0 :(得分:0)

您可以使用is [not] in ( ... )语句组合sql语句。像这样:

select users who bought product 1,2,3,4 where user_id not in (select all users_id who did not buy product 4 in 2018)

编辑:您将需要一个ID,因为在is in语句中,您只能比较值

或者您也可以自己学习编码,而不必尝试让其他人免费为您工作!